<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE CPP, TypeFamilies #-}</span><span>
</span><span id="line-2"></span><span>
</span><span id="line-3"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-4"></span><span class="hs-comment">--</span><span>
</span><span id="line-5"></span><span class="hs-comment">-- Machine-dependent assembly language</span><span>
</span><span id="line-6"></span><span class="hs-comment">--</span><span>
</span><span id="line-7"></span><span class="hs-comment">-- (c) The University of Glasgow 1993-2004</span><span>
</span><span id="line-8"></span><span class="hs-comment">--</span><span>
</span><span id="line-9"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-10"></span><span>
</span><span id="line-11"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.CmmToAsm.X86.Instr</span><span>
</span><span id="line-12"></span><span>   </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier">Instr</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier">Operand</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PrefetchVariant"><span class="hs-identifier">PrefetchVariant</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier">JumpDest</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><span id="line-13"></span><span>   </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#getJumpDestBlockId"><span class="hs-identifier">getJumpDestBlockId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#canShortcut"><span class="hs-identifier">canShortcut</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatics"><span class="hs-identifier">shortcutStatics</span></a></span><span>
</span><span id="line-14"></span><span>   </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutJump"><span class="hs-identifier">shortcutJump</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#allocMoreStack"><span class="hs-identifier">allocMoreStack</span></a></span><span>
</span><span id="line-15"></span><span>   </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#maxSpillSlots"><span class="hs-identifier">maxSpillSlots</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#archWordFormat"><span class="hs-identifier">archWordFormat</span></a></span><span>
</span><span id="line-16"></span><span>   </span><span class="hs-special">)</span><span>
</span><span id="line-17"></span><span class="hs-keyword">where</span><span class="hs-cpp">

#include &quot;HsVersions.h&quot;
</span><span>
</span><span id="line-21"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-22"></span><span>
</span><span id="line-23"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Cond.html"><span class="hs-identifier">GHC.CmmToAsm.X86.Cond</span></a></span><span>
</span><span id="line-24"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html"><span class="hs-identifier">GHC.CmmToAsm.X86.Regs</span></a></span><span>
</span><span id="line-25"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.Instr</span></a></span><span>
</span><span id="line-26"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html"><span class="hs-identifier">GHC.CmmToAsm.Format</span></a></span><span>
</span><span id="line-27"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.Class.html"><span class="hs-identifier">GHC.Platform.Reg.Class</span></a></span><span>
</span><span id="line-28"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html"><span class="hs-identifier">GHC.Platform.Reg</span></a></span><span>
</span><span id="line-29"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Reg.Target.html"><span class="hs-identifier">GHC.CmmToAsm.Reg.Target</span></a></span><span>
</span><span id="line-30"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Config.html"><span class="hs-identifier">GHC.CmmToAsm.Config</span></a></span><span>
</span><span id="line-31"></span><span>
</span><span id="line-32"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html"><span class="hs-identifier">GHC.Cmm.BlockId</span></a></span><span>
</span><span id="line-33"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Collections.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Collections</span></a></span><span>
</span><span id="line-34"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Label</span></a></span><span>
</span><span id="line-35"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Platform.Regs.html"><span class="hs-identifier">GHC.Platform.Regs</span></a></span><span>
</span><span id="line-36"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span>
</span><span id="line-37"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html"><span class="hs-identifier">GHC.Data.FastString</span></a></span><span>
</span><span id="line-38"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-39"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#"><span class="hs-identifier">GHC.Platform</span></a></span><span>
</span><span id="line-40"></span><span>
</span><span id="line-41"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Basic.html"><span class="hs-identifier">GHC.Types.Basic</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Basic.html#Alignment"><span class="hs-identifier">Alignment</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-42"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html"><span class="hs-identifier">GHC.Cmm.CLabel</span></a></span><span>
</span><span id="line-43"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Set.html"><span class="hs-identifier">GHC.Types.Unique.Set</span></a></span><span>
</span><span id="line-44"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html"><span class="hs-identifier">GHC.Types.Unique</span></a></span><span>
</span><span id="line-45"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Supply.html"><span class="hs-identifier">GHC.Types.Unique.Supply</span></a></span><span>
</span><span id="line-46"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.DebugBlock.html"><span class="hs-identifier">GHC.Cmm.DebugBlock</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.DebugBlock.html#UnwindTable"><span class="hs-identifier">UnwindTable</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-47"></span><span>
</span><span id="line-48"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Control.Monad.html#"><span class="hs-identifier">Control.Monad</span></a></span><span>
</span><span id="line-49"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.Maybe.html#"><span class="hs-identifier">Data.Maybe</span></a></span><span>       </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Maybe.html#fromMaybe"><span class="hs-identifier">fromMaybe</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-50"></span><span>
</span><span id="line-51"></span><span class="hs-comment">-- Format of an x86/x86_64 memory address, in bytes.</span><span>
</span><span id="line-52"></span><span class="hs-comment">--</span><span>
</span><span id="line-53"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#archWordFormat"><span class="hs-identifier hs-type">archWordFormat</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span>
</span><span id="line-54"></span><span id="archWordFormat"><span class="annot"><span class="annottext">archWordFormat :: Bool -&gt; Format
</span><a href="GHC.CmmToAsm.X86.Instr.html#archWordFormat"><span class="hs-identifier hs-var hs-var">archWordFormat</span></a></span></span><span> </span><span id="local-6989586621681030196"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681030196"><span class="hs-identifier hs-var">is32Bit</span></a></span></span><span>
</span><span id="line-55"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681030196"><span class="hs-identifier hs-var">is32Bit</span></a></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-56"></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span>
</span><span id="line-57"></span><span>
</span><span id="line-58"></span><span class="hs-comment">-- | Instruction instance for x86 instruction set.</span><span>
</span><span id="line-59"></span><span class="hs-keyword">instance</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#Instruction"><span class="hs-identifier hs-type">Instruction</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-60"></span><span>        </span><span id="local-6989586621681030177"><span class="annot"><span class="annottext">regUsageOfInstr :: Platform -&gt; Instr -&gt; RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#regUsageOfInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">regUsageOfInstr</span></a></span></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Instr -&gt; RegUsage
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_regUsageOfInstr"><span class="hs-identifier hs-var">x86_regUsageOfInstr</span></a></span><span>
</span><span id="line-61"></span><span>        </span><span id="local-6989586621681030174"><span class="annot"><span class="annottext">patchRegsOfInstr :: Instr -&gt; (Reg -&gt; Reg) -&gt; Instr
</span><a href="GHC.CmmToAsm.Instr.html#patchRegsOfInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">patchRegsOfInstr</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; (Reg -&gt; Reg) -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchRegsOfInstr"><span class="hs-identifier hs-var">x86_patchRegsOfInstr</span></a></span><span>
</span><span id="line-62"></span><span>        </span><span id="local-6989586621681030171"><span class="annot"><span class="annottext">isJumpishInstr :: Instr -&gt; Bool
</span><a href="GHC.CmmToAsm.Instr.html#isJumpishInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">isJumpishInstr</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_isJumpishInstr"><span class="hs-identifier hs-var">x86_isJumpishInstr</span></a></span><span>
</span><span id="line-63"></span><span>        </span><span id="local-6989586621681030168"><span class="annot"><span class="annottext">jumpDestsOfInstr :: Instr -&gt; [BlockId]
</span><a href="GHC.CmmToAsm.Instr.html#jumpDestsOfInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">jumpDestsOfInstr</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; [BlockId]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_jumpDestsOfInstr"><span class="hs-identifier hs-var">x86_jumpDestsOfInstr</span></a></span><span>
</span><span id="line-64"></span><span>        </span><span id="local-6989586621681030165"><span class="annot"><span class="annottext">patchJumpInstr :: Instr -&gt; (BlockId -&gt; BlockId) -&gt; Instr
</span><a href="GHC.CmmToAsm.Instr.html#patchJumpInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">patchJumpInstr</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; (BlockId -&gt; BlockId) -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchJumpInstr"><span class="hs-identifier hs-var">x86_patchJumpInstr</span></a></span><span>
</span><span id="line-65"></span><span>        </span><span id="local-6989586621681030162"><span class="annot"><span class="annottext">mkSpillInstr :: NCGConfig -&gt; Reg -&gt; Int -&gt; Int -&gt; Instr
</span><a href="GHC.CmmToAsm.Instr.html#mkSpillInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">mkSpillInstr</span></a></span></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; Reg -&gt; Int -&gt; Int -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkSpillInstr"><span class="hs-identifier hs-var">x86_mkSpillInstr</span></a></span><span>
</span><span id="line-66"></span><span>        </span><span id="local-6989586621681030159"><span class="annot"><span class="annottext">mkLoadInstr :: NCGConfig -&gt; Reg -&gt; Int -&gt; Int -&gt; Instr
</span><a href="GHC.CmmToAsm.Instr.html#mkLoadInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">mkLoadInstr</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; Reg -&gt; Int -&gt; Int -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkLoadInstr"><span class="hs-identifier hs-var">x86_mkLoadInstr</span></a></span><span>
</span><span id="line-67"></span><span>        </span><span id="local-6989586621681030156"><span class="annot"><span class="annottext">takeDeltaInstr :: Instr -&gt; Maybe Int
</span><a href="GHC.CmmToAsm.Instr.html#takeDeltaInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">takeDeltaInstr</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; Maybe Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeDeltaInstr"><span class="hs-identifier hs-var">x86_takeDeltaInstr</span></a></span><span>
</span><span id="line-68"></span><span>        </span><span id="local-6989586621681030153"><span class="annot"><span class="annottext">isMetaInstr :: Instr -&gt; Bool
</span><a href="GHC.CmmToAsm.Instr.html#isMetaInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">isMetaInstr</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_isMetaInstr"><span class="hs-identifier hs-var">x86_isMetaInstr</span></a></span><span>
</span><span id="line-69"></span><span>        </span><span id="local-6989586621681030150"><span class="annot"><span class="annottext">mkRegRegMoveInstr :: Platform -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.Instr.html#mkRegRegMoveInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">mkRegRegMoveInstr</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkRegRegMoveInstr"><span class="hs-identifier hs-var">x86_mkRegRegMoveInstr</span></a></span><span>
</span><span id="line-70"></span><span>        </span><span id="local-6989586621681030147"><span class="annot"><span class="annottext">takeRegRegMoveInstr :: Instr -&gt; Maybe (Reg, Reg)
</span><a href="GHC.CmmToAsm.Instr.html#takeRegRegMoveInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">takeRegRegMoveInstr</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; Maybe (Reg, Reg)
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeRegRegMoveInstr"><span class="hs-identifier hs-var">x86_takeRegRegMoveInstr</span></a></span><span>
</span><span id="line-71"></span><span>        </span><span id="local-6989586621681030144"><span class="annot"><span class="annottext">mkJumpInstr :: BlockId -&gt; [Instr]
</span><a href="GHC.CmmToAsm.Instr.html#mkJumpInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">mkJumpInstr</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; [Instr]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkJumpInstr"><span class="hs-identifier hs-var">x86_mkJumpInstr</span></a></span><span>
</span><span id="line-72"></span><span>        </span><span id="local-6989586621681030141"><span class="annot"><span class="annottext">mkStackAllocInstr :: Platform -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.Instr.html#mkStackAllocInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">mkStackAllocInstr</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkStackAllocInstr"><span class="hs-identifier hs-var">x86_mkStackAllocInstr</span></a></span><span>
</span><span id="line-73"></span><span>        </span><span id="local-6989586621681030138"><span class="annot"><span class="annottext">mkStackDeallocInstr :: Platform -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.Instr.html#mkStackDeallocInstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">mkStackDeallocInstr</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkStackDeallocInstr"><span class="hs-identifier hs-var">x86_mkStackDeallocInstr</span></a></span><span>
</span><span id="line-74"></span><span>
</span><span id="line-75"></span><span>
</span><span id="line-76"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-77"></span><span class="hs-comment">-- Intel x86 instructions</span><span>
</span><span id="line-78"></span><span>
</span><span id="line-79"></span><span class="hs-comment">{-
Intel, in their infinite wisdom, selected a stack model for floating
point registers on x86.  That might have made sense back in 1979 --
nowadays we can see it for the nonsense it really is.  A stack model
fits poorly with the existing nativeGen infrastructure, which assumes
flat integer and FP register sets.  Prior to this commit, nativeGen
could not generate correct x86 FP code -- to do so would have meant
somehow working the register-stack paradigm into the register
allocator and spiller, which sounds very difficult.

We have decided to cheat, and go for a simple fix which requires no
infrastructure modifications, at the expense of generating ropey but
correct FP code.  All notions of the x86 FP stack and its insns have
been removed.  Instead, we pretend (to the instruction selector and
register allocator) that x86 has six floating point registers, %fake0
.. %fake5, which can be used in the usual flat manner.  We further
claim that x86 has floating point instructions very similar to SPARC
and Alpha, that is, a simple 3-operand register-register arrangement.
Code generation and register allocation proceed on this basis.

When we come to print out the final assembly, our convenient fiction
is converted to dismal reality.  Each fake instruction is
independently converted to a series of real x86 instructions.
%fake0 .. %fake5 are mapped to %st(0) .. %st(5).  To do reg-reg
arithmetic operations, the two operands are pushed onto the top of the
FP stack, the operation done, and the result copied back into the
relevant register.  There are only six %fake registers because 2 are
needed for the translation, and x86 has 8 in total.

The translation is inefficient but is simple and it works.  A cleverer
translation would handle a sequence of insns, simulating the FP stack
contents, would not impose a fixed mapping from %fake to %st regs, and
hopefully could avoid most of the redundant reg-reg moves of the
current translation.

We might as well make use of whatever unique FP facilities Intel have
chosen to bless us with (let's not be churlish, after all).
Hence GLDZ and GLD1.  Bwahahahahahahaha!
-}</span><span>
</span><span id="line-118"></span><span>
</span><span id="line-119"></span><span class="hs-comment">{-
Note [x86 Floating point precision]

Intel's internal floating point registers are by default 80 bit
extended precision.  This means that all operations done on values in
registers are done at 80 bits, and unless the intermediate values are
truncated to the appropriate size (32 or 64 bits) by storing in
memory, calculations in registers will give different results from
calculations which pass intermediate values in memory (eg. via
function calls).

One solution is to set the FPU into 64 bit precision mode.  Some OSs
do this (eg. FreeBSD) and some don't (eg. Linux).  The problem here is
that this will only affect 64-bit precision arithmetic; 32-bit
calculations will still be done at 64-bit precision in registers.  So
it doesn't solve the whole problem.

There's also the issue of what the C library is expecting in terms of
precision.  It seems to be the case that glibc on Linux expects the
FPU to be set to 80 bit precision, so setting it to 64 bit could have
unexpected effects.  Changing the default could have undesirable
effects on other 3rd-party library code too, so the right thing would
be to save/restore the FPU control word across Haskell code if we were
to do this.

gcc's -ffloat-store gives consistent results by always storing the
results of floating-point calculations in memory, which works for both
32 and 64-bit precision.  However, it only affects the values of
user-declared floating point variables in C, not intermediate results.
GHC in -fvia-C mode uses -ffloat-store (see the -fexcess-precision
flag).

Another problem is how to spill floating point registers in the
register allocator.  Should we spill the whole 80 bits, or just 64?
On an OS which is set to 64 bit precision, spilling 64 is fine.  On
Linux, spilling 64 bits will round the results of some operations.
This is what gcc does.  Spilling at 80 bits requires taking up a full
128 bit slot (so we get alignment).  We spill at 80-bits and ignore
the alignment problems.

In the future [edit: now available in GHC 7.0.1, with the -msse2
flag], we'll use the SSE registers for floating point.  This requires
a CPU that supports SSE2 (ordinary SSE only supports 32 bit precision
float ops), which means P4 or Xeon and above.  Using SSE will solve
all these problems, because the SSE registers use fixed 32 bit or 64
bit precision.

--SDM 1/2003
-}</span><span>
</span><span id="line-168"></span><span>
</span><span id="line-169"></span><span class="hs-keyword">data</span><span> </span><span id="Instr"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-var">Instr</span></a></span></span><span>
</span><span id="line-170"></span><span>        </span><span class="hs-comment">-- comment pseudo-op</span><span>
</span><span id="line-171"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span id="COMMENT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#COMMENT"><span class="hs-identifier hs-var">COMMENT</span></a></span></span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span>
</span><span id="line-172"></span><span>
</span><span id="line-173"></span><span>        </span><span class="hs-comment">-- location pseudo-op (file, line, col, name)</span><span>
</span><span id="line-174"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="LOCATION"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCATION"><span class="hs-identifier hs-var">LOCATION</span></a></span></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#String"><span class="hs-identifier hs-type">String</span></a></span><span>
</span><span id="line-175"></span><span>
</span><span id="line-176"></span><span>        </span><span class="hs-comment">-- some static data spat out during code</span><span>
</span><span id="line-177"></span><span>        </span><span class="hs-comment">-- generation.  Will be extracted before</span><span>
</span><span id="line-178"></span><span>        </span><span class="hs-comment">-- pretty-printing.</span><span>
</span><span id="line-179"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="LDATA"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LDATA"><span class="hs-identifier hs-var">LDATA</span></a></span></span><span>   </span><span class="annot"><a href="GHC.Cmm.html#Section"><span class="hs-identifier hs-type">Section</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Basic.html#Alignment"><span class="hs-identifier hs-type">Alignment</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmStatics"><span class="hs-identifier hs-type">RawCmmStatics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-180"></span><span>
</span><span id="line-181"></span><span>        </span><span class="hs-comment">-- start a new basic block.  Useful during</span><span>
</span><span id="line-182"></span><span>        </span><span class="hs-comment">-- codegen, removed later.  Preceding</span><span>
</span><span id="line-183"></span><span>        </span><span class="hs-comment">-- instruction should be a jump, as per the</span><span>
</span><span id="line-184"></span><span>        </span><span class="hs-comment">-- invariants for a BasicBlock (see Cmm).</span><span>
</span><span id="line-185"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="NEWBLOCK"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NEWBLOCK"><span class="hs-identifier hs-var">NEWBLOCK</span></a></span></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-186"></span><span>
</span><span id="line-187"></span><span>        </span><span class="hs-comment">-- unwinding information</span><span>
</span><span id="line-188"></span><span>        </span><span class="hs-comment">-- See Note [Unwinding information in the NCG].</span><span>
</span><span id="line-189"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="UNWIND"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#UNWIND"><span class="hs-identifier hs-var">UNWIND</span></a></span></span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html#CLabel"><span class="hs-identifier hs-type">CLabel</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.DebugBlock.html#UnwindTable"><span class="hs-identifier hs-type">UnwindTable</span></a></span><span>
</span><span id="line-190"></span><span>
</span><span id="line-191"></span><span>        </span><span class="hs-comment">-- specify current stack offset for benefit of subsequent passes.</span><span>
</span><span id="line-192"></span><span>        </span><span class="hs-comment">-- This carries a BlockId so it can be used in unwinding information.</span><span>
</span><span id="line-193"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="DELTA"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DELTA"><span class="hs-identifier hs-var">DELTA</span></a></span></span><span>  </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-194"></span><span>
</span><span id="line-195"></span><span>        </span><span class="hs-comment">-- Moves.</span><span>
</span><span id="line-196"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="MOV"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-197"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CMOV"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMOV"><span class="hs-identifier hs-var">CMOV</span></a></span></span><span>   </span><span class="annot"><a href="GHC.CmmToAsm.X86.Cond.html#Cond"><span class="hs-identifier hs-type">Cond</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>
</span><span id="line-198"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="MOVZxL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOVZxL"><span class="hs-identifier hs-var">MOVZxL</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-comment">-- format is the size of operand 1</span><span>
</span><span id="line-199"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="MOVSxL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOVSxL"><span class="hs-identifier hs-var">MOVSxL</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-comment">-- format is the size of operand 1</span><span>
</span><span id="line-200"></span><span>        </span><span class="hs-comment">-- x86_64 note: plain mov into a 32-bit register always zero-extends</span><span>
</span><span id="line-201"></span><span>        </span><span class="hs-comment">-- into the 64-bit reg, in contrast to the 8 and 16-bit movs which</span><span>
</span><span id="line-202"></span><span>        </span><span class="hs-comment">-- don't affect the high bits of the register.</span><span>
</span><span id="line-203"></span><span>
</span><span id="line-204"></span><span>        </span><span class="hs-comment">-- Load effective address (also a very useful three-operand add instruction :-)</span><span>
</span><span id="line-205"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="LEA"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LEA"><span class="hs-identifier hs-var">LEA</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-206"></span><span>
</span><span id="line-207"></span><span>        </span><span class="hs-comment">-- Int Arithmetic.</span><span>
</span><span id="line-208"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="ADD"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-209"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="ADC"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADC"><span class="hs-identifier hs-var">ADC</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-210"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SUB"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-211"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SBB"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SBB"><span class="hs-identifier hs-var">SBB</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-212"></span><span>
</span><span id="line-213"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="MUL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MUL"><span class="hs-identifier hs-var">MUL</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-214"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="MUL2"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MUL2"><span class="hs-identifier hs-var">MUL2</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>         </span><span class="hs-comment">-- %edx:%eax = operand * %rax</span><span>
</span><span id="line-215"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="IMUL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL"><span class="hs-identifier hs-var">IMUL</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-comment">-- signed int mul</span><span>
</span><span id="line-216"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="IMUL2"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL2"><span class="hs-identifier hs-var">IMUL2</span></a></span></span><span>       </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>         </span><span class="hs-comment">-- %edx:%eax = operand * %eax</span><span>
</span><span id="line-217"></span><span>
</span><span id="line-218"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="DIV"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DIV"><span class="hs-identifier hs-var">DIV</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>         </span><span class="hs-comment">-- eax := eax:edx/op, edx := eax:edx%op</span><span>
</span><span id="line-219"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="IDIV"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IDIV"><span class="hs-identifier hs-var">IDIV</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>         </span><span class="hs-comment">-- ditto, but signed</span><span>
</span><span id="line-220"></span><span>
</span><span id="line-221"></span><span>        </span><span class="hs-comment">-- Int Arithmetic, where the effects on the condition register</span><span>
</span><span id="line-222"></span><span>        </span><span class="hs-comment">-- are important. Used in specialized sequences such as MO_Add2.</span><span>
</span><span id="line-223"></span><span>        </span><span class="hs-comment">-- Do not rewrite these instructions to &quot;equivalent&quot; ones that</span><span>
</span><span id="line-224"></span><span>        </span><span class="hs-comment">-- have different effect on the condition register! (See #9013.)</span><span>
</span><span id="line-225"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="ADD_CC"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADD_CC"><span class="hs-identifier hs-var">ADD_CC</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-226"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SUB_CC"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SUB_CC"><span class="hs-identifier hs-var">SUB_CC</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-227"></span><span>
</span><span id="line-228"></span><span>        </span><span class="hs-comment">-- Simple bit-twiddling.</span><span>
</span><span id="line-229"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="AND"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-230"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="OR"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span></span><span>          </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-231"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="XOR"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XOR"><span class="hs-identifier hs-var">XOR</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-232"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="NOT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NOT"><span class="hs-identifier hs-var">NOT</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-233"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="NEGI"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NEGI"><span class="hs-identifier hs-var">NEGI</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>         </span><span class="hs-comment">-- NEG instruction (name clash with Cond)</span><span>
</span><span id="line-234"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="BSWAP"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSWAP"><span class="hs-identifier hs-var">BSWAP</span></a></span></span><span>       </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>
</span><span id="line-235"></span><span>
</span><span id="line-236"></span><span>        </span><span class="hs-comment">-- Shifts (amount may be immediate or %cl only)</span><span>
</span><span id="line-237"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SHL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SHL"><span class="hs-identifier hs-var">SHL</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span class="hs-comment">{-amount-}</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-238"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SAR"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SAR"><span class="hs-identifier hs-var">SAR</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span class="hs-comment">{-amount-}</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-239"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SHR"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SHR"><span class="hs-identifier hs-var">SHR</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span class="hs-comment">{-amount-}</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-240"></span><span>
</span><span id="line-241"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="BT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BT"><span class="hs-identifier hs-var">BT</span></a></span></span><span>          </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#Imm"><span class="hs-identifier hs-type">Imm</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-242"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="NOP"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span></span><span>
</span><span id="line-243"></span><span>
</span><span id="line-244"></span><span>
</span><span id="line-245"></span><span>        </span><span class="hs-comment">-- We need to support the FSTP (x87 store and pop) instruction</span><span>
</span><span id="line-246"></span><span>        </span><span class="hs-comment">-- so that we can correctly read off the return value of an</span><span>
</span><span id="line-247"></span><span>        </span><span class="hs-comment">-- x86 CDECL C function call when its floating point.</span><span>
</span><span id="line-248"></span><span>        </span><span class="hs-comment">-- so we dont include a register argument, and just use st(0)</span><span>
</span><span id="line-249"></span><span>        </span><span class="hs-comment">-- this instruction is used ONLY for return values of C ffi calls</span><span>
</span><span id="line-250"></span><span>        </span><span class="hs-comment">-- in x86_32 abi</span><span>
</span><span id="line-251"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="X87Store"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#X87Store"><span class="hs-identifier hs-var">X87Store</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#AddrMode"><span class="hs-identifier hs-type">AddrMode</span></a></span><span> </span><span class="hs-comment">-- st(0), dst</span><span>
</span><span id="line-252"></span><span>
</span><span id="line-253"></span><span>
</span><span id="line-254"></span><span>        </span><span class="hs-comment">-- SSE2 floating point: we use a restricted set of the available SSE2</span><span>
</span><span id="line-255"></span><span>        </span><span class="hs-comment">-- instructions for floating-point.</span><span>
</span><span id="line-256"></span><span>        </span><span class="hs-comment">-- use MOV for moving (either movss or movsd (movlpd better?))</span><span>
</span><span id="line-257"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CVTSS2SD"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSS2SD"><span class="hs-identifier hs-var">CVTSS2SD</span></a></span></span><span>      </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>            </span><span class="hs-comment">-- F32 to F64</span><span>
</span><span id="line-258"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CVTSD2SS"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSD2SS"><span class="hs-identifier hs-var">CVTSD2SS</span></a></span></span><span>      </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>            </span><span class="hs-comment">-- F64 to F32</span><span>
</span><span id="line-259"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CVTTSS2SIQ"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSS2SIQ"><span class="hs-identifier hs-var">CVTTSS2SIQ</span></a></span></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- F32 to I32/I64 (with truncation)</span><span>
</span><span id="line-260"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CVTTSD2SIQ"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSD2SIQ"><span class="hs-identifier hs-var">CVTTSD2SIQ</span></a></span></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- F64 to I32/I64 (with truncation)</span><span>
</span><span id="line-261"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CVTSI2SS"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SS"><span class="hs-identifier hs-var">CVTSI2SS</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- I32/I64 to F32</span><span>
</span><span id="line-262"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CVTSI2SD"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SD"><span class="hs-identifier hs-var">CVTSI2SD</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- I32/I64 to F64</span><span>
</span><span id="line-263"></span><span>
</span><span id="line-264"></span><span>        </span><span class="hs-comment">-- use ADD, SUB, and SQRT for arithmetic.  In both cases, operands</span><span>
</span><span id="line-265"></span><span>        </span><span class="hs-comment">-- are  Operand Reg.</span><span>
</span><span id="line-266"></span><span>
</span><span id="line-267"></span><span>        </span><span class="hs-comment">-- SSE2 floating-point division:</span><span>
</span><span id="line-268"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="FDIV"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FDIV"><span class="hs-identifier hs-var">FDIV</span></a></span></span><span>          </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>   </span><span class="hs-comment">-- divisor, dividend(dst)</span><span>
</span><span id="line-269"></span><span>
</span><span id="line-270"></span><span>        </span><span class="hs-comment">-- use CMP for comparisons.  ucomiss and ucomisd instructions</span><span>
</span><span id="line-271"></span><span>        </span><span class="hs-comment">-- compare single/double prec floating point respectively.</span><span>
</span><span id="line-272"></span><span>
</span><span id="line-273"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SQRT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SQRT"><span class="hs-identifier hs-var">SQRT</span></a></span></span><span>          </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>      </span><span class="hs-comment">-- src, dst</span><span>
</span><span id="line-274"></span><span>
</span><span id="line-275"></span><span>
</span><span id="line-276"></span><span>        </span><span class="hs-comment">-- Comparison</span><span>
</span><span id="line-277"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="TEST"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#TEST"><span class="hs-identifier hs-var">TEST</span></a></span></span><span>          </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-278"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CMP"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMP"><span class="hs-identifier hs-var">CMP</span></a></span></span><span>           </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-279"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="SETCC"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SETCC"><span class="hs-identifier hs-var">SETCC</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.X86.Cond.html#Cond"><span class="hs-identifier hs-type">Cond</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-280"></span><span>
</span><span id="line-281"></span><span>        </span><span class="hs-comment">-- Stack Operations.</span><span>
</span><span id="line-282"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="PUSH"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PUSH"><span class="hs-identifier hs-var">PUSH</span></a></span></span><span>          </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-283"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="POP"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#POP"><span class="hs-identifier hs-var">POP</span></a></span></span><span>           </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>
</span><span id="line-284"></span><span>        </span><span class="hs-comment">-- both unused (SDM):</span><span>
</span><span id="line-285"></span><span>        </span><span class="hs-comment">--  | PUSHA</span><span>
</span><span id="line-286"></span><span>        </span><span class="hs-comment">--  | POPA</span><span>
</span><span id="line-287"></span><span>
</span><span id="line-288"></span><span>        </span><span class="hs-comment">-- Jumping around.</span><span>
</span><span id="line-289"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="JMP"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-var">JMP</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- including live Regs at the call</span><span>
</span><span id="line-290"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="JXX"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-var">JXX</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.X86.Cond.html#Cond"><span class="hs-identifier hs-type">Cond</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>  </span><span class="hs-comment">-- includes unconditional branches</span><span>
</span><span id="line-291"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="JXX_GBL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX_GBL"><span class="hs-identifier hs-var">JXX_GBL</span></a></span></span><span>     </span><span class="annot"><a href="GHC.CmmToAsm.X86.Cond.html#Cond"><span class="hs-identifier hs-type">Cond</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#Imm"><span class="hs-identifier hs-type">Imm</span></a></span><span>      </span><span class="hs-comment">-- non-local version of JXX</span><span>
</span><span id="line-292"></span><span>        </span><span class="hs-comment">-- Table jump</span><span>
</span><span id="line-293"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="JMP_TBL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-var">JMP_TBL</span></a></span></span><span>     </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span>   </span><span class="hs-comment">-- Address to jump to</span><span>
</span><span id="line-294"></span><span>                      </span><span class="hs-special">[</span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- Targets of the jump table</span><span>
</span><span id="line-295"></span><span>                      </span><span class="annot"><a href="GHC.Cmm.html#Section"><span class="hs-identifier hs-type">Section</span></a></span><span>   </span><span class="hs-comment">-- Data section jump table should be put in</span><span>
</span><span id="line-296"></span><span>                      </span><span class="annot"><a href="GHC.Cmm.CLabel.html#CLabel"><span class="hs-identifier hs-type">CLabel</span></a></span><span>    </span><span class="hs-comment">-- Label of jump table</span><span>
</span><span id="line-297"></span><span>        </span><span class="hs-comment">-- | X86 call instruction</span><span>
</span><span id="line-298"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CALL"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span></span><span>        </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Either.html#Either"><span class="hs-identifier hs-type">Either</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#Imm"><span class="hs-identifier hs-type">Imm</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- ^ Jump target</span><span>
</span><span id="line-299"></span><span>                      </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">]</span><span>            </span><span class="hs-comment">-- ^ Arguments (required for register allocation)</span><span>
</span><span id="line-300"></span><span>
</span><span id="line-301"></span><span>        </span><span class="hs-comment">-- Other things.</span><span>
</span><span id="line-302"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CLTD"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CLTD"><span class="hs-identifier hs-var">CLTD</span></a></span></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span>            </span><span class="hs-comment">-- sign extend %eax into %edx:%eax</span><span>
</span><span id="line-303"></span><span>
</span><span id="line-304"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="FETCHGOT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FETCHGOT"><span class="hs-identifier hs-var">FETCHGOT</span></a></span></span><span>    </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>        </span><span class="hs-comment">-- pseudo-insn for ELF position-independent code</span><span>
</span><span id="line-305"></span><span>                                 </span><span class="hs-comment">-- pretty-prints as</span><span>
</span><span id="line-306"></span><span>                                 </span><span class="hs-comment">--       call 1f</span><span>
</span><span id="line-307"></span><span>                                 </span><span class="hs-comment">-- 1:    popl %reg</span><span>
</span><span id="line-308"></span><span>                                 </span><span class="hs-comment">--       addl __GLOBAL_OFFSET_TABLE__+.-1b, %reg</span><span>
</span><span id="line-309"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="FETCHPC"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FETCHPC"><span class="hs-identifier hs-var">FETCHPC</span></a></span></span><span>     </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>        </span><span class="hs-comment">-- pseudo-insn for Darwin position-independent code</span><span>
</span><span id="line-310"></span><span>                                 </span><span class="hs-comment">-- pretty-prints as</span><span>
</span><span id="line-311"></span><span>                                 </span><span class="hs-comment">--       call 1f</span><span>
</span><span id="line-312"></span><span>                                 </span><span class="hs-comment">-- 1:    popl %reg</span><span>
</span><span id="line-313"></span><span>
</span><span id="line-314"></span><span>    </span><span class="hs-comment">-- bit counting instructions</span><span>
</span><span id="line-315"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="POPCNT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#POPCNT"><span class="hs-identifier hs-var">POPCNT</span></a></span></span><span>      </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- [SSE4.2] count number of bits set to 1</span><span>
</span><span id="line-316"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="LZCNT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LZCNT"><span class="hs-identifier hs-var">LZCNT</span></a></span></span><span>       </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- [BMI2] count number of leading zeros</span><span>
</span><span id="line-317"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="TZCNT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#TZCNT"><span class="hs-identifier hs-var">TZCNT</span></a></span></span><span>       </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- [BMI2] count number of trailing zeros</span><span>
</span><span id="line-318"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="BSF"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSF"><span class="hs-identifier hs-var">BSF</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- bit scan forward</span><span>
</span><span id="line-319"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="BSR"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSR"><span class="hs-identifier hs-var">BSR</span></a></span></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- bit scan reverse</span><span>
</span><span id="line-320"></span><span>
</span><span id="line-321"></span><span>    </span><span class="hs-comment">-- bit manipulation instructions</span><span>
</span><span id="line-322"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="PDEP"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PDEP"><span class="hs-identifier hs-var">PDEP</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- [BMI2] deposit bits to   the specified mask</span><span>
</span><span id="line-323"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="PEXT"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PEXT"><span class="hs-identifier hs-var">PEXT</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-comment">-- [BMI2] extract bits from the specified mask</span><span>
</span><span id="line-324"></span><span>
</span><span id="line-325"></span><span>    </span><span class="hs-comment">-- prefetch</span><span>
</span><span id="line-326"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="PREFETCH"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PREFETCH"><span class="hs-identifier hs-var">PREFETCH</span></a></span></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PrefetchVariant"><span class="hs-identifier hs-type">PrefetchVariant</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-comment">-- prefetch Variant, addr size, address to prefetch</span><span>
</span><span id="line-327"></span><span>                                        </span><span class="hs-comment">-- variant can be NTA, Lvl0, Lvl1, or Lvl2</span><span>
</span><span id="line-328"></span><span>
</span><span id="line-329"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="LOCK"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCK"><span class="hs-identifier hs-var">LOCK</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-comment">-- lock prefix</span><span>
</span><span id="line-330"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="XADD"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XADD"><span class="hs-identifier hs-var">XADD</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-comment">-- src (r), dst (r/m)</span><span>
</span><span id="line-331"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="CMPXCHG"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMPXCHG"><span class="hs-identifier hs-var">CMPXCHG</span></a></span></span><span>     </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-comment">-- src (r), dst (r/m), eax implicit</span><span>
</span><span id="line-332"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="XCHG"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XCHG"><span class="hs-identifier hs-var">XCHG</span></a></span></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>     </span><span class="hs-comment">-- src (r/m), dst (r/m)</span><span>
</span><span id="line-333"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="MFENCE"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MFENCE"><span class="hs-identifier hs-var">MFENCE</span></a></span></span><span>
</span><span id="line-334"></span><span>
</span><span id="line-335"></span><span class="hs-keyword">data</span><span> </span><span id="PrefetchVariant"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PrefetchVariant"><span class="hs-identifier hs-var">PrefetchVariant</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="NTA"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NTA"><span class="hs-identifier hs-var">NTA</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="Lvl0"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Lvl0"><span class="hs-identifier hs-var">Lvl0</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="Lvl1"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Lvl1"><span class="hs-identifier hs-var">Lvl1</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="Lvl2"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Lvl2"><span class="hs-identifier hs-var">Lvl2</span></a></span></span><span>
</span><span id="line-336"></span><span>
</span><span id="line-337"></span><span>
</span><span id="line-338"></span><span class="hs-keyword">data</span><span> </span><span id="Operand"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-var">Operand</span></a></span></span><span>
</span><span id="line-339"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span id="OpReg"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span></span><span>  </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>            </span><span class="hs-comment">-- register</span><span>
</span><span id="line-340"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="OpImm"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#Imm"><span class="hs-identifier hs-type">Imm</span></a></span><span>            </span><span class="hs-comment">-- immediate value</span><span>
</span><span id="line-341"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span id="OpAddr"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-var">OpAddr</span></a></span></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#AddrMode"><span class="hs-identifier hs-type">AddrMode</span></a></span><span>       </span><span class="hs-comment">-- memory reference</span><span>
</span><span id="line-342"></span><span>
</span><span id="line-343"></span><span>
</span><span id="line-344"></span><span>
</span><span id="line-345"></span><span class="hs-comment">-- | Returns which registers are read and written as a (read, written)</span><span>
</span><span id="line-346"></span><span class="hs-comment">-- pair.</span><span>
</span><span id="line-347"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_regUsageOfInstr"><span class="hs-identifier hs-type">x86_regUsageOfInstr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#RegUsage"><span class="hs-identifier hs-type">RegUsage</span></a></span><span>
</span><span id="line-348"></span><span id="x86_regUsageOfInstr"><span class="annot"><span class="annottext">x86_regUsageOfInstr :: Platform -&gt; Instr -&gt; RegUsage
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_regUsageOfInstr"><span class="hs-identifier hs-var hs-var">x86_regUsageOfInstr</span></a></span></span><span> </span><span id="local-6989586621681030059"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681030058"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681030058"><span class="hs-identifier hs-var">instr</span></a></span></span><span>
</span><span id="line-349"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681030058"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-350"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-type">MOV</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030057"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030057"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030056"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030056"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030055"><span class="hs-identifier hs-var">usageRW</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030057"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030056"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-351"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMOV"><span class="hs-identifier hs-type">CMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030054"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030054"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030053"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030053"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030054"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030053"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030053"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-352"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOVZxL"><span class="hs-identifier hs-type">MOVZxL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030050"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030050"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030049"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030049"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030055"><span class="hs-identifier hs-var">usageRW</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030050"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030049"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-353"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOVSxL"><span class="hs-identifier hs-type">MOVSxL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030048"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030048"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030047"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030047"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030055"><span class="hs-identifier hs-var">usageRW</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030048"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030047"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-354"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LEA"><span class="hs-identifier hs-type">LEA</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030046"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030046"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030045"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030045"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030055"><span class="hs-identifier hs-var">usageRW</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030046"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030045"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-355"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADD"><span class="hs-identifier hs-type">ADD</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030044"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030044"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030043"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030043"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030044"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030043"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-356"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADC"><span class="hs-identifier hs-type">ADC</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030041"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030041"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030040"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030040"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030041"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030040"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-357"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-type">SUB</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030039"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030039"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030038"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030038"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030039"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030038"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-358"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SBB"><span class="hs-identifier hs-type">SBB</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030037"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030037"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030036"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030036"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030037"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030036"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-359"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL"><span class="hs-identifier hs-type">IMUL</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030035"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030035"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030034"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030034"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030035"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030034"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-360"></span><span>
</span><span id="line-361"></span><span>    </span><span class="hs-comment">-- Result of IMULB will be in just in %ax</span><span>
</span><span id="line-362"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL2"><span class="hs-identifier hs-type">IMUL2</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II8"><span class="hs-identifier hs-var">II8</span></a></span><span> </span><span id="local-6989586621681030032"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030032"><span class="hs-identifier hs-var">src</span></a></span></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030032"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-363"></span><span>    </span><span class="hs-comment">-- Result of IMUL for wider values, will be split between %dx/%edx/%rdx and</span><span>
</span><span id="line-364"></span><span>    </span><span class="hs-comment">-- %ax/%eax/%rax.</span><span>
</span><span id="line-365"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL2"><span class="hs-identifier hs-type">IMUL2</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030030"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030030"><span class="hs-identifier hs-var">src</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030030"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-366"></span><span>
</span><span id="line-367"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MUL"><span class="hs-identifier hs-type">MUL</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030028"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030028"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030027"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030027"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030028"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030027"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-368"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MUL2"><span class="hs-identifier hs-type">MUL2</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030026"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030026"><span class="hs-identifier hs-var">src</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030026"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-369"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DIV"><span class="hs-identifier hs-type">DIV</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030025"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030025"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030025"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-370"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IDIV"><span class="hs-identifier hs-type">IDIV</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030024"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030024"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030024"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-371"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADD_CC"><span class="hs-identifier hs-type">ADD_CC</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030023"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030023"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030022"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030022"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030023"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030022"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-372"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SUB_CC"><span class="hs-identifier hs-type">SUB_CC</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030021"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030021"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030020"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030020"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030021"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030020"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-373"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#AND"><span class="hs-identifier hs-type">AND</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030019"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030019"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030018"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030018"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030019"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030018"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-374"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OR"><span class="hs-identifier hs-type">OR</span></a></span><span>     </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030017"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030017"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030016"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030016"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030017"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030016"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-375"></span><span>
</span><span id="line-376"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XOR"><span class="hs-identifier hs-type">XOR</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681030015"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030015"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681030014"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030014"><span class="hs-identifier hs-var">dst</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-377"></span><span>        </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030015"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030014"><span class="hs-identifier hs-var">dst</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030014"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-378"></span><span>
</span><span id="line-379"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XOR"><span class="hs-identifier hs-type">XOR</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030013"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030013"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681030012"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030012"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030013"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030012"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-380"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NOT"><span class="hs-identifier hs-type">NOT</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030011"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030011"><span class="hs-identifier hs-var">op</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; RegUsage
</span><a href="#local-6989586621681030010"><span class="hs-identifier hs-var">usageM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030011"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-381"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSWAP"><span class="hs-identifier hs-type">BSWAP</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030009"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030009"><span class="hs-identifier hs-var">reg</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030009"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681030009"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-382"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NEGI"><span class="hs-identifier hs-type">NEGI</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030008"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030008"><span class="hs-identifier hs-var">op</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; RegUsage
</span><a href="#local-6989586621681030010"><span class="hs-identifier hs-var">usageM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030008"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-383"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SHL"><span class="hs-identifier hs-type">SHL</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030007"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030007"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681030006"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030006"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030007"><span class="hs-identifier hs-var">imm</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030006"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-384"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SAR"><span class="hs-identifier hs-type">SAR</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030005"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030005"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681030004"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030004"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030005"><span class="hs-identifier hs-var">imm</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030004"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-385"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SHR"><span class="hs-identifier hs-type">SHR</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681030003"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030003"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681030002"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030002"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030003"><span class="hs-identifier hs-var">imm</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030002"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-386"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BT"><span class="hs-identifier hs-type">BT</span></a></span><span>     </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span>   </span><span id="local-6989586621681030001"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030001"><span class="hs-identifier hs-var">src</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681030001"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-387"></span><span>
</span><span id="line-388"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PUSH"><span class="hs-identifier hs-type">PUSH</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029999"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029999"><span class="hs-identifier hs-var">op</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029999"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-389"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#POP"><span class="hs-identifier hs-type">POP</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029998"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029998"><span class="hs-identifier hs-var">op</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg]
</span><a href="#local-6989586621681029997"><span class="hs-identifier hs-var">def_W</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029998"><span class="hs-identifier hs-var">op</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-390"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#TEST"><span class="hs-identifier hs-type">TEST</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029996"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029996"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029995"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029995"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029996"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029995"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-391"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMP"><span class="hs-identifier hs-type">CMP</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029993"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029993"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029992"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029992"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029993"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029992"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-392"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SETCC"><span class="hs-identifier hs-type">SETCC</span></a></span><span>  </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029991"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029991"><span class="hs-identifier hs-var">op</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg]
</span><a href="#local-6989586621681029997"><span class="hs-identifier hs-var">def_W</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029991"><span class="hs-identifier hs-var">op</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-393"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span>    </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><span class="hs-identifier">_</span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-394"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX_GBL"><span class="hs-identifier hs-type">JXX_GBL</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-395"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-type">JMP</span></a></span><span>     </span><span id="local-6989586621681029990"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029990"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span id="local-6989586621681029989"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029989"><span class="hs-identifier hs-var">regs</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029990"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029989"><span class="hs-identifier hs-var">regs</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-396"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span> </span><span id="local-6989586621681029988"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029988"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Section
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><span class="hs-identifier">_</span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029988"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-397"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-type">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span id="local-6989586621681029987"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029987"><span class="hs-identifier hs-var">params</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029987"><span class="hs-identifier hs-var">params</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; [Reg]
</span><a href="GHC.CmmToAsm.X86.Regs.html#callClobberedRegs"><span class="hs-identifier hs-var">callClobberedRegs</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-398"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-type">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621681029985"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029985"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681029984"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029984"><span class="hs-identifier hs-var">params</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029985"><span class="hs-identifier hs-var">reg</span></a></span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029984"><span class="hs-identifier hs-var">params</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; [Reg]
</span><a href="GHC.CmmToAsm.X86.Regs.html#callClobberedRegs"><span class="hs-identifier hs-var">callClobberedRegs</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-399"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CLTD"><span class="hs-identifier hs-type">CLTD</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#edx"><span class="hs-identifier hs-var">edx</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-400"></span><span>    </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-401"></span><span>
</span><span id="line-402"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#X87Store"><span class="hs-identifier hs-type">X87Store</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span>  </span><span id="local-6989586621681029983"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029983"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029983"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-403"></span><span>
</span><span id="line-404"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSS2SD"><span class="hs-identifier hs-type">CVTSS2SD</span></a></span><span>   </span><span id="local-6989586621681029981"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029981"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029980"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029980"><span class="hs-identifier hs-var">dst</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029981"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029980"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-405"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSD2SS"><span class="hs-identifier hs-type">CVTSD2SS</span></a></span><span>   </span><span id="local-6989586621681029979"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029979"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029978"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029978"><span class="hs-identifier hs-var">dst</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029979"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029978"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-406"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSS2SIQ"><span class="hs-identifier hs-type">CVTTSS2SIQ</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029977"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029977"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029976"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029976"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029977"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029976"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-407"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSD2SIQ"><span class="hs-identifier hs-type">CVTTSD2SIQ</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029975"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029975"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029974"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029974"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029975"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029974"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-408"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SS"><span class="hs-identifier hs-type">CVTSI2SS</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029973"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029973"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029972"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029972"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029973"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029972"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-409"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SD"><span class="hs-identifier hs-type">CVTSI2SD</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029971"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029971"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029970"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029970"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029971"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029970"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-410"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FDIV"><span class="hs-identifier hs-type">FDIV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span>     </span><span id="local-6989586621681029969"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029969"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029968"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029968"><span class="hs-identifier hs-var">dst</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029969"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029968"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-411"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SQRT"><span class="hs-identifier hs-type">SQRT</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029967"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029967"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029966"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029966"><span class="hs-identifier hs-var">dst</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029967"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029966"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-412"></span><span>
</span><span id="line-413"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FETCHGOT"><span class="hs-identifier hs-type">FETCHGOT</span></a></span><span> </span><span id="local-6989586621681029965"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029965"><span class="hs-identifier hs-var">reg</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029965"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-414"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FETCHPC"><span class="hs-identifier hs-type">FETCHPC</span></a></span><span>  </span><span id="local-6989586621681029964"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029964"><span class="hs-identifier hs-var">reg</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029964"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-415"></span><span>
</span><span id="line-416"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#COMMENT"><span class="hs-identifier hs-type">COMMENT</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><span class="hs-identifier">_</span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#noUsage"><span class="hs-identifier hs-var">noUsage</span></a></span><span>
</span><span id="line-417"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCATION"><span class="hs-identifier hs-type">LOCATION</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#noUsage"><span class="hs-identifier hs-var">noUsage</span></a></span><span>
</span><span id="line-418"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#UNWIND"><span class="hs-identifier hs-type">UNWIND</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#noUsage"><span class="hs-identifier hs-var">noUsage</span></a></span><span>
</span><span id="line-419"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DELTA"><span class="hs-identifier hs-type">DELTA</span></a></span><span>   </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#noUsage"><span class="hs-identifier hs-var">noUsage</span></a></span><span>
</span><span id="line-420"></span><span>
</span><span id="line-421"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#POPCNT"><span class="hs-identifier hs-type">POPCNT</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029962"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029962"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029961"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029961"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029962"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029961"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-422"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LZCNT"><span class="hs-identifier hs-type">LZCNT</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029960"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029960"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029959"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029959"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029960"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029959"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-423"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#TZCNT"><span class="hs-identifier hs-type">TZCNT</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029958"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029958"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029957"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029957"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029958"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029957"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-424"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSF"><span class="hs-identifier hs-type">BSF</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029956"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029956"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029955"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029955"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029956"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029955"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-425"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSR"><span class="hs-identifier hs-type">BSR</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029954"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029954"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029953"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029953"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029954"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029953"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-426"></span><span>
</span><span id="line-427"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PDEP"><span class="hs-identifier hs-type">PDEP</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029952"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029952"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029951"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029951"><span class="hs-identifier hs-var">mask</span></a></span></span><span> </span><span id="local-6989586621681029950"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029950"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029952"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029951"><span class="hs-identifier hs-var">mask</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029950"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-428"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PEXT"><span class="hs-identifier hs-type">PEXT</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029949"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029949"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029948"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029948"><span class="hs-identifier hs-var">mask</span></a></span></span><span> </span><span id="local-6989586621681029947"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029947"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029949"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029948"><span class="hs-identifier hs-var">mask</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029947"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-429"></span><span>
</span><span id="line-430"></span><span>    </span><span class="hs-comment">-- note: might be a better way to do this</span><span>
</span><span id="line-431"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PREFETCH"><span class="hs-identifier hs-type">PREFETCH</span></a></span><span> </span><span class="annot"><span class="annottext">PrefetchVariant
</span><span class="hs-identifier">_</span></span><span>  </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029946"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029946"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029946"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-432"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCK"><span class="hs-identifier hs-type">LOCK</span></a></span><span> </span><span id="local-6989586621681029945"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029945"><span class="hs-identifier hs-var">i</span></a></span></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Instr -&gt; RegUsage
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_regUsageOfInstr"><span class="hs-identifier hs-var">x86_regUsageOfInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029945"><span class="hs-identifier hs-var">i</span></a></span><span>
</span><span id="line-433"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XADD"><span class="hs-identifier hs-type">XADD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029944"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029944"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029943"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029943"><span class="hs-identifier hs-var">dst</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681029942"><span class="hs-identifier hs-var">usageMM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029944"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029943"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-434"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMPXCHG"><span class="hs-identifier hs-type">CMPXCHG</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029941"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029941"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029940"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029940"><span class="hs-identifier hs-var">dst</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681029939"><span class="hs-identifier hs-var">usageRMM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029941"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029940"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-435"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XCHG"><span class="hs-identifier hs-type">XCHG</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029938"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029938"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029937"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029937"><span class="hs-identifier hs-var">dst</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681029942"><span class="hs-identifier hs-var">usageMM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029938"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029937"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-436"></span><span>    </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MFENCE"><span class="hs-identifier hs-var">MFENCE</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#noUsage"><span class="hs-identifier hs-var">noUsage</span></a></span><span>
</span><span id="line-437"></span><span>
</span><span id="line-438"></span><span>    </span><span id="local-6989586621681029936"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029936"><span class="hs-identifier hs-var">_other</span></a></span></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; RegUsage
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;regUsage: unrecognised instr&quot;</span></span><span>
</span><span id="line-439"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-440"></span><span>    </span><span class="hs-comment">-- # Definitions</span><span>
</span><span id="line-441"></span><span>    </span><span class="hs-comment">--</span><span>
</span><span id="line-442"></span><span>    </span><span class="hs-comment">-- Written: If the operand is a register, it's written. If it's an</span><span>
</span><span id="line-443"></span><span>    </span><span class="hs-comment">-- address, registers mentioned in the address are read.</span><span>
</span><span id="line-444"></span><span>    </span><span class="hs-comment">--</span><span>
</span><span id="line-445"></span><span>    </span><span class="hs-comment">-- Modified: If the operand is a register, it's both read and</span><span>
</span><span id="line-446"></span><span>    </span><span class="hs-comment">-- written. If it's an address, registers mentioned in the address</span><span>
</span><span id="line-447"></span><span>    </span><span class="hs-comment">-- are read.</span><span>
</span><span id="line-448"></span><span>
</span><span id="line-449"></span><span>    </span><span class="hs-comment">-- 2 operand form; first operand Read; second Written</span><span>
</span><span id="line-450"></span><span>    </span><span class="annot"><a href="#local-6989586621681030055"><span class="hs-identifier hs-type">usageRW</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#RegUsage"><span class="hs-identifier hs-type">RegUsage</span></a></span><span>
</span><span id="line-451"></span><span>    </span><span id="local-6989586621681030055"><span class="annot"><span class="annottext">usageRW :: Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030055"><span class="hs-identifier hs-var hs-var">usageRW</span></a></span></span><span> </span><span id="local-6989586621681029934"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029934"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029933"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029933"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029934"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029933"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-452"></span><span>    </span><span class="annot"><a href="#local-6989586621681030055"><span class="hs-identifier hs-var">usageRW</span></a></span><span> </span><span id="local-6989586621681029932"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029932"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029931"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029931"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029932"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029931"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-453"></span><span>    </span><span class="annot"><a href="#local-6989586621681030055"><span class="hs-identifier hs-var">usageRW</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span>                 </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; RegUsage
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.usageRW: no match&quot;</span></span><span>
</span><span id="line-454"></span><span>
</span><span id="line-455"></span><span>    </span><span class="hs-comment">-- 2 operand form; first operand Read; second Modified</span><span>
</span><span id="line-456"></span><span>    </span><span class="annot"><a href="#local-6989586621681030042"><span class="hs-identifier hs-type">usageRM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#RegUsage"><span class="hs-identifier hs-type">RegUsage</span></a></span><span>
</span><span id="line-457"></span><span>    </span><span id="local-6989586621681030042"><span class="annot"><span class="annottext">usageRM :: Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681030042"><span class="hs-identifier hs-var hs-var">usageRM</span></a></span></span><span> </span><span id="local-6989586621681029930"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029930"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029929"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029929"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029930"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029929"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029929"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-458"></span><span>    </span><span class="annot"><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span id="local-6989586621681029928"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029928"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029927"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029927"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029928"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029927"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-459"></span><span>    </span><span class="annot"><a href="#local-6989586621681030042"><span class="hs-identifier hs-var">usageRM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span>                 </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; RegUsage
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.usageRM: no match&quot;</span></span><span>
</span><span id="line-460"></span><span>
</span><span id="line-461"></span><span>    </span><span class="hs-comment">-- 2 operand form; first operand Modified; second Modified</span><span>
</span><span id="line-462"></span><span>    </span><span class="annot"><a href="#local-6989586621681029942"><span class="hs-identifier hs-type">usageMM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#RegUsage"><span class="hs-identifier hs-type">RegUsage</span></a></span><span>
</span><span id="line-463"></span><span>    </span><span id="local-6989586621681029942"><span class="annot"><span class="annottext">usageMM :: Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681029942"><span class="hs-identifier hs-var hs-var">usageMM</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029926"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029926"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029925"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029925"><span class="hs-identifier hs-var">dst</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029926"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029925"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029926"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029925"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-464"></span><span>    </span><span class="annot"><a href="#local-6989586621681029942"><span class="hs-identifier hs-var">usageMM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029924"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029924"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029923"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029923"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029923"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029924"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029924"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-465"></span><span>    </span><span class="annot"><a href="#local-6989586621681029942"><span class="hs-identifier hs-var">usageMM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029922"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029922"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029921"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029921"><span class="hs-identifier hs-var">dst</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029922"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029921"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029921"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-466"></span><span>    </span><span class="annot"><a href="#local-6989586621681029942"><span class="hs-identifier hs-var">usageMM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span>                     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; RegUsage
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.usageMM: no match&quot;</span></span><span>
</span><span id="line-467"></span><span>
</span><span id="line-468"></span><span>    </span><span class="hs-comment">-- 3 operand form; first operand Read; second Modified; third Modified</span><span>
</span><span id="line-469"></span><span>    </span><span class="annot"><a href="#local-6989586621681029939"><span class="hs-identifier hs-type">usageRMM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#RegUsage"><span class="hs-identifier hs-type">RegUsage</span></a></span><span>
</span><span id="line-470"></span><span>    </span><span id="local-6989586621681029939"><span class="annot"><span class="annottext">usageRMM :: Operand -&gt; Operand -&gt; Operand -&gt; RegUsage
</span><a href="#local-6989586621681029939"><span class="hs-identifier hs-var hs-var">usageRMM</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029920"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029920"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029919"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029919"><span class="hs-identifier hs-var">dst</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029918"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029918"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029920"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029919"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029918"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029919"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029918"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-471"></span><span>    </span><span class="annot"><a href="#local-6989586621681029939"><span class="hs-identifier hs-var">usageRMM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029917"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029917"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029916"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029916"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029915"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029915"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029916"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029917"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029915"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029915"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-472"></span><span>    </span><span class="annot"><a href="#local-6989586621681029939"><span class="hs-identifier hs-var">usageRMM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span>                               </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; RegUsage
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.usageRMM: no match&quot;</span></span><span>
</span><span id="line-473"></span><span>
</span><span id="line-474"></span><span>    </span><span class="hs-comment">-- 1 operand form; operand Modified</span><span>
</span><span id="line-475"></span><span>    </span><span class="annot"><a href="#local-6989586621681030010"><span class="hs-identifier hs-type">usageM</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#RegUsage"><span class="hs-identifier hs-type">RegUsage</span></a></span><span>
</span><span id="line-476"></span><span>    </span><span id="local-6989586621681030010"><span class="annot"><span class="annottext">usageM :: Operand -&gt; RegUsage
</span><a href="#local-6989586621681030010"><span class="hs-identifier hs-var hs-var">usageM</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029914"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029914"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var">mkRU</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029914"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029914"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-477"></span><span>    </span><span class="annot"><a href="#local-6989586621681030010"><span class="hs-identifier hs-var">usageM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029913"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029913"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var">mkRUR</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029913"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-478"></span><span>    </span><span class="annot"><a href="#local-6989586621681030010"><span class="hs-identifier hs-var">usageM</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span>                    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; RegUsage
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.usageM: no match&quot;</span></span><span>
</span><span id="line-479"></span><span>
</span><span id="line-480"></span><span>    </span><span class="hs-comment">-- Registers defd when an operand is written.</span><span>
</span><span id="line-481"></span><span>    </span><span id="local-6989586621681029997"><span class="annot"><span class="annottext">def_W :: Operand -&gt; [Reg]
</span><a href="#local-6989586621681029997"><span class="hs-identifier hs-var hs-var">def_W</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029912"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029912"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029912"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-482"></span><span>    </span><span class="annot"><a href="#local-6989586621681029997"><span class="hs-identifier hs-var">def_W</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">)</span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-483"></span><span>    </span><span class="annot"><a href="#local-6989586621681029997"><span class="hs-identifier hs-var">def_W</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span>                     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; [Reg]
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.def_W: no match&quot;</span></span><span>
</span><span id="line-484"></span><span>
</span><span id="line-485"></span><span>    </span><span class="hs-comment">-- Registers used when an operand is read.</span><span>
</span><span id="line-486"></span><span>    </span><span id="local-6989586621681030051"><span class="annot"><span class="annottext">use_R :: Operand -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681030051"><span class="hs-identifier hs-var hs-var">use_R</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029911"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029911"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span>  </span><span id="local-6989586621681029910"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029910"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029911"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029910"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-487"></span><span>    </span><span class="annot"><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-type">OpImm</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>    </span><span id="local-6989586621681029909"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029909"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029909"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-488"></span><span>    </span><span class="annot"><a href="#local-6989586621681030051"><span class="hs-identifier hs-var">use_R</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029908"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029908"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span>  </span><span id="local-6989586621681029907"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029907"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029908"><span class="hs-identifier hs-var">ea</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029907"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-489"></span><span>
</span><span id="line-490"></span><span>    </span><span class="hs-comment">-- Registers used to compute an effective address.</span><span>
</span><span id="line-491"></span><span>    </span><span id="local-6989586621681029982"><span class="annot"><span class="annottext">use_EA :: AddrMode -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029982"><span class="hs-identifier hs-var hs-var">use_EA</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#ImmAddr"><span class="hs-identifier hs-type">ImmAddr</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681029905"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029905"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029905"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-492"></span><span>    </span><span class="annot"><a href="#local-6989586621681029982"><span class="hs-identifier hs-var">use_EA</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#AddrBaseIndex"><span class="hs-identifier hs-type">AddrBaseIndex</span></a></span><span> </span><span id="local-6989586621681029903"><span class="annot"><span class="annottext">EABase
</span><a href="#local-6989586621681029903"><span class="hs-identifier hs-var">base</span></a></span></span><span> </span><span id="local-6989586621681029902"><span class="annot"><span class="annottext">EAIndex
</span><a href="#local-6989586621681029902"><span class="hs-identifier hs-var">index</span></a></span></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681029901"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029901"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-493"></span><span>        </span><span class="annot"><span class="annottext">EABase -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029900"><span class="hs-identifier hs-var">use_base</span></a></span><span> </span><span class="annot"><span class="annottext">EABase
</span><a href="#local-6989586621681029903"><span class="hs-identifier hs-var">base</span></a></span><span> </span><span class="annot"><span class="annottext">([Reg] -&gt; [Reg]) -&gt; [Reg] -&gt; [Reg]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">EAIndex -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029899"><span class="hs-identifier hs-var">use_index</span></a></span><span> </span><span class="annot"><span class="annottext">EAIndex
</span><a href="#local-6989586621681029902"><span class="hs-identifier hs-var">index</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029901"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-494"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029900"><span class="annot"><span class="annottext">use_base :: EABase -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029900"><span class="hs-identifier hs-var hs-var">use_base</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#EABaseReg"><span class="hs-identifier hs-type">EABaseReg</span></a></span><span> </span><span id="local-6989586621681029897"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029897"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-special">)</span><span>  </span><span id="local-6989586621681029896"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029896"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029897"><span class="hs-identifier hs-var">r</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029896"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-495"></span><span>              </span><span class="annot"><a href="#local-6989586621681029900"><span class="hs-identifier hs-var">use_base</span></a></span><span> </span><span class="annot"><span class="annottext">EABase
</span><span class="hs-identifier">_</span></span><span>              </span><span id="local-6989586621681029895"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029895"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029895"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-496"></span><span>              </span><span id="local-6989586621681029899"><span class="annot"><span class="annottext">use_index :: EAIndex -&gt; [Reg] -&gt; [Reg]
</span><a href="#local-6989586621681029899"><span class="hs-identifier hs-var hs-var">use_index</span></a></span></span><span> </span><span class="annot"><span class="annottext">EAIndex
</span><a href="GHC.CmmToAsm.X86.Regs.html#EAIndexNone"><span class="hs-identifier hs-var">EAIndexNone</span></a></span><span>   </span><span id="local-6989586621681029893"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029893"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029893"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-497"></span><span>              </span><span class="annot"><a href="#local-6989586621681029899"><span class="hs-identifier hs-var">use_index</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#EAIndex"><span class="hs-identifier hs-type">EAIndex</span></a></span><span> </span><span id="local-6989586621681029891"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029891"><span class="hs-identifier hs-var">i</span></a></span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681029890"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029890"><span class="hs-identifier hs-var">tl</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029891"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; [Reg] -&gt; [Reg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029890"><span class="hs-identifier hs-var">tl</span></a></span><span>
</span><span id="line-498"></span><span>
</span><span id="line-499"></span><span>    </span><span id="local-6989586621681030000"><span class="annot"><span class="annottext">mkRUR :: [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030000"><span class="hs-identifier hs-var hs-var">mkRUR</span></a></span></span><span> </span><span id="local-6989586621681029889"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029889"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029888"><span class="hs-identifier hs-var">src'</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage -&gt; RegUsage
</span><span class="hs-operator hs-var">`seq`</span></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#RU"><span class="hs-identifier hs-var">RU</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029888"><span class="hs-identifier hs-var">src'</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-500"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029888"><span class="annot"><span class="annottext">src' :: [Reg]
</span><a href="#local-6989586621681029888"><span class="hs-identifier hs-var hs-var">src'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Reg -&gt; Bool) -&gt; [Reg] -&gt; [Reg]
forall a. (a -&gt; Bool) -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.List.html#filter"><span class="hs-identifier hs-var">filter</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-var">interesting</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029889"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-501"></span><span>
</span><span id="line-502"></span><span>    </span><span id="local-6989586621681030052"><span class="annot"><span class="annottext">mkRU :: [Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="#local-6989586621681030052"><span class="hs-identifier hs-var hs-var">mkRU</span></a></span></span><span> </span><span id="local-6989586621681029885"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029885"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029884"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029884"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029883"><span class="hs-identifier hs-var">src'</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage -&gt; RegUsage
</span><span class="hs-operator hs-var">`seq`</span></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029882"><span class="hs-identifier hs-var">dst'</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; RegUsage -&gt; RegUsage
</span><span class="hs-operator hs-var">`seq`</span></span><span> </span><span class="annot"><span class="annottext">[Reg] -&gt; [Reg] -&gt; RegUsage
</span><a href="GHC.CmmToAsm.Instr.html#RU"><span class="hs-identifier hs-var">RU</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029883"><span class="hs-identifier hs-var">src'</span></a></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029882"><span class="hs-identifier hs-var">dst'</span></a></span><span>
</span><span id="line-503"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029883"><span class="annot"><span class="annottext">src' :: [Reg]
</span><a href="#local-6989586621681029883"><span class="hs-identifier hs-var hs-var">src'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Reg -&gt; Bool) -&gt; [Reg] -&gt; [Reg]
forall a. (a -&gt; Bool) -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.List.html#filter"><span class="hs-identifier hs-var">filter</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-var">interesting</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029885"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-504"></span><span>              </span><span id="local-6989586621681029882"><span class="annot"><span class="annottext">dst' :: [Reg]
</span><a href="#local-6989586621681029882"><span class="hs-identifier hs-var hs-var">dst'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Reg -&gt; Bool) -&gt; [Reg] -&gt; [Reg]
forall a. (a -&gt; Bool) -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.List.html#filter"><span class="hs-identifier hs-var">filter</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-var">interesting</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681030059"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029884"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-505"></span><span>
</span><span id="line-506"></span><span class="hs-comment">-- | Is this register interesting for the register allocator?</span><span>
</span><span id="line-507"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-type">interesting</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-508"></span><span id="interesting"><span class="annot"><span class="annottext">interesting :: Platform -&gt; Reg -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-var hs-var">interesting</span></a></span></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span>        </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#RegVirtual"><span class="hs-identifier hs-type">RegVirtual</span></a></span><span> </span><span class="annot"><span class="annottext">VirtualReg
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-509"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-var">interesting</span></a></span><span> </span><span id="local-6989586621681029880"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029880"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#RegReal"><span class="hs-identifier hs-type">RegReal</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#RealRegSingle"><span class="hs-identifier hs-type">RealRegSingle</span></a></span><span> </span><span id="local-6989586621681029877"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029877"><span class="hs-identifier hs-var">i</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; Bool
</span><a href="GHC.Platform.Regs.html#freeReg"><span class="hs-identifier hs-var">freeReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029880"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029877"><span class="hs-identifier hs-var">i</span></a></span><span>
</span><span id="line-510"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#interesting"><span class="hs-identifier hs-var">interesting</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span>        </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#RegReal"><span class="hs-identifier hs-type">RegReal</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#RealRegPair"><span class="hs-identifier hs-type">RealRegPair</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Bool
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.interesting: no reg pairs on this arch&quot;</span></span><span>
</span><span id="line-511"></span><span>
</span><span id="line-512"></span><span>
</span><span id="line-513"></span><span>
</span><span id="line-514"></span><span class="hs-comment">-- | Applies the supplied function to all registers in instructions.</span><span>
</span><span id="line-515"></span><span class="hs-comment">-- Typically used to change virtual registers to real registers.</span><span>
</span><span id="line-516"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchRegsOfInstr"><span class="hs-identifier hs-type">x86_patchRegsOfInstr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-517"></span><span id="x86_patchRegsOfInstr"><span class="annot"><span class="annottext">x86_patchRegsOfInstr :: Instr -&gt; (Reg -&gt; Reg) -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchRegsOfInstr"><span class="hs-identifier hs-var hs-var">x86_patchRegsOfInstr</span></a></span></span><span> </span><span id="local-6989586621681029874"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span id="local-6989586621681029873"><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span></span><span>
</span><span id="line-518"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-519"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-type">MOV</span></a></span><span>  </span><span id="local-6989586621681029872"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029872"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029871"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029871"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029870"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029870"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029872"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029871"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029870"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-520"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMOV"><span class="hs-identifier hs-type">CMOV</span></a></span><span> </span><span id="local-6989586621681029868"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029868"><span class="hs-identifier hs-var">cc</span></a></span></span><span> </span><span id="local-6989586621681029867"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029867"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029866"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029866"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029865"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029865"><span class="hs-identifier hs-var">dst</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CMOV"><span class="hs-identifier hs-var">CMOV</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029868"><span class="hs-identifier hs-var">cc</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029867"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029866"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029865"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-521"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOVZxL"><span class="hs-identifier hs-type">MOVZxL</span></a></span><span> </span><span id="local-6989586621681029863"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029863"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029862"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029862"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029861"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029861"><span class="hs-identifier hs-var">dst</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOVZxL"><span class="hs-identifier hs-var">MOVZxL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029863"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029862"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029861"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-522"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOVSxL"><span class="hs-identifier hs-type">MOVSxL</span></a></span><span> </span><span id="local-6989586621681029860"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029860"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029859"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029859"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029858"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029858"><span class="hs-identifier hs-var">dst</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOVSxL"><span class="hs-identifier hs-var">MOVSxL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029860"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029859"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029858"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-523"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LEA"><span class="hs-identifier hs-type">LEA</span></a></span><span>  </span><span id="local-6989586621681029857"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029857"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029856"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029856"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029855"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029855"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#LEA"><span class="hs-identifier hs-var">LEA</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029857"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029856"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029855"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-524"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADD"><span class="hs-identifier hs-type">ADD</span></a></span><span>  </span><span id="local-6989586621681029854"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029854"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029853"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029853"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029852"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029852"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029854"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029853"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029852"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-525"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADC"><span class="hs-identifier hs-type">ADC</span></a></span><span>  </span><span id="local-6989586621681029851"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029851"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029850"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029850"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029849"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029849"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#ADC"><span class="hs-identifier hs-var">ADC</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029851"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029850"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029849"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-526"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-type">SUB</span></a></span><span>  </span><span id="local-6989586621681029848"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029848"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029847"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029847"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029846"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029846"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029848"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029847"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029846"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-527"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SBB"><span class="hs-identifier hs-type">SBB</span></a></span><span>  </span><span id="local-6989586621681029845"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029845"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029844"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029844"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029843"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029843"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SBB"><span class="hs-identifier hs-var">SBB</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029845"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029844"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029843"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-528"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL"><span class="hs-identifier hs-type">IMUL</span></a></span><span> </span><span id="local-6989586621681029842"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029842"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029841"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029841"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029840"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029840"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#IMUL"><span class="hs-identifier hs-var">IMUL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029842"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029841"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029840"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-529"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IMUL2"><span class="hs-identifier hs-type">IMUL2</span></a></span><span> </span><span id="local-6989586621681029839"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029839"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029838"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029838"><span class="hs-identifier hs-var">src</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#IMUL2"><span class="hs-identifier hs-var">IMUL2</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029839"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029838"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-530"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MUL"><span class="hs-identifier hs-type">MUL</span></a></span><span> </span><span id="local-6989586621681029836"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029836"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029835"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029835"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029834"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029834"><span class="hs-identifier hs-var">dst</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MUL"><span class="hs-identifier hs-var">MUL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029836"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029835"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029834"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-531"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MUL2"><span class="hs-identifier hs-type">MUL2</span></a></span><span> </span><span id="local-6989586621681029833"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029833"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029832"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029832"><span class="hs-identifier hs-var">src</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MUL2"><span class="hs-identifier hs-var">MUL2</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029833"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029832"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-532"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#IDIV"><span class="hs-identifier hs-type">IDIV</span></a></span><span> </span><span id="local-6989586621681029831"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029831"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029830"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029830"><span class="hs-identifier hs-var">op</span></a></span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#IDIV"><span class="hs-identifier hs-var">IDIV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029831"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029830"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-533"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DIV"><span class="hs-identifier hs-type">DIV</span></a></span><span> </span><span id="local-6989586621681029829"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029829"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029828"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029828"><span class="hs-identifier hs-var">op</span></a></span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#DIV"><span class="hs-identifier hs-var">DIV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029829"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029828"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-534"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#ADD_CC"><span class="hs-identifier hs-type">ADD_CC</span></a></span><span> </span><span id="local-6989586621681029827"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029827"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029826"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029826"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029825"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029825"><span class="hs-identifier hs-var">dst</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#ADD_CC"><span class="hs-identifier hs-var">ADD_CC</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029827"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029826"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029825"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-535"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SUB_CC"><span class="hs-identifier hs-type">SUB_CC</span></a></span><span> </span><span id="local-6989586621681029824"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029824"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029823"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029823"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029822"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029822"><span class="hs-identifier hs-var">dst</span></a></span></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB_CC"><span class="hs-identifier hs-var">SUB_CC</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029824"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029823"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029822"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-536"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#AND"><span class="hs-identifier hs-type">AND</span></a></span><span>  </span><span id="local-6989586621681029821"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029821"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029820"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029820"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029819"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029819"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029821"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029820"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029819"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-537"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OR"><span class="hs-identifier hs-type">OR</span></a></span><span>   </span><span id="local-6989586621681029818"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029818"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029817"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029817"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029816"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029816"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029818"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029817"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029816"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-538"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XOR"><span class="hs-identifier hs-type">XOR</span></a></span><span>  </span><span id="local-6989586621681029815"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029815"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029814"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029814"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029813"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029813"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#XOR"><span class="hs-identifier hs-var">XOR</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029815"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029814"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029813"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-539"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NOT"><span class="hs-identifier hs-type">NOT</span></a></span><span>  </span><span id="local-6989586621681029812"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029812"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029811"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029811"><span class="hs-identifier hs-var">op</span></a></span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#NOT"><span class="hs-identifier hs-var">NOT</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029812"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029811"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-540"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSWAP"><span class="hs-identifier hs-type">BSWAP</span></a></span><span> </span><span id="local-6989586621681029810"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029810"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029809"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029809"><span class="hs-identifier hs-var">reg</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#BSWAP"><span class="hs-identifier hs-var">BSWAP</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029810"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029809"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-541"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NEGI"><span class="hs-identifier hs-type">NEGI</span></a></span><span> </span><span id="local-6989586621681029808"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029808"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029807"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029807"><span class="hs-identifier hs-var">op</span></a></span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#NEGI"><span class="hs-identifier hs-var">NEGI</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029808"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029807"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-542"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SHL"><span class="hs-identifier hs-type">SHL</span></a></span><span>  </span><span id="local-6989586621681029806"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029806"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029805"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029805"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681029804"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029804"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SHL"><span class="hs-identifier hs-var">SHL</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029806"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029805"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029804"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-543"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SAR"><span class="hs-identifier hs-type">SAR</span></a></span><span>  </span><span id="local-6989586621681029803"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029803"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029802"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029802"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681029801"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029801"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SAR"><span class="hs-identifier hs-var">SAR</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029803"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029802"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029801"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-544"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SHR"><span class="hs-identifier hs-type">SHR</span></a></span><span>  </span><span id="local-6989586621681029800"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029800"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029799"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029799"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681029798"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029798"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SHR"><span class="hs-identifier hs-var">SHR</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029800"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029799"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029798"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-545"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BT"><span class="hs-identifier hs-type">BT</span></a></span><span>   </span><span id="local-6989586621681029797"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029797"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029796"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029796"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681029795"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029795"><span class="hs-identifier hs-var">src</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Imm -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#BT"><span class="hs-identifier hs-var">BT</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029797"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029796"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029795"><span class="hs-identifier hs-var">src</span></a></span><span>
</span><span id="line-546"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#TEST"><span class="hs-identifier hs-type">TEST</span></a></span><span> </span><span id="local-6989586621681029794"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029794"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029793"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029793"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029792"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029792"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#TEST"><span class="hs-identifier hs-var">TEST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029794"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029793"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029792"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-547"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMP"><span class="hs-identifier hs-type">CMP</span></a></span><span>  </span><span id="local-6989586621681029791"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029791"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029790"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029790"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029789"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029789"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CMP"><span class="hs-identifier hs-var">CMP</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029791"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029790"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029789"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-548"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PUSH"><span class="hs-identifier hs-type">PUSH</span></a></span><span> </span><span id="local-6989586621681029788"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029788"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029787"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029787"><span class="hs-identifier hs-var">op</span></a></span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#PUSH"><span class="hs-identifier hs-var">PUSH</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029788"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029787"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-549"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#POP"><span class="hs-identifier hs-type">POP</span></a></span><span>  </span><span id="local-6989586621681029786"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029786"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029785"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029785"><span class="hs-identifier hs-var">op</span></a></span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#POP"><span class="hs-identifier hs-var">POP</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029786"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029785"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-550"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SETCC"><span class="hs-identifier hs-type">SETCC</span></a></span><span> </span><span id="local-6989586621681029784"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029784"><span class="hs-identifier hs-var">cond</span></a></span></span><span> </span><span id="local-6989586621681029783"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029783"><span class="hs-identifier hs-var">op</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Instr) -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var">patch1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Cond -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SETCC"><span class="hs-identifier hs-var">SETCC</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029784"><span class="hs-identifier hs-var">cond</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029783"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-551"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-type">JMP</span></a></span><span> </span><span id="local-6989586621681029782"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029782"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span id="local-6989586621681029781"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029781"><span class="hs-identifier hs-var">regs</span></a></span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Reg] -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-var">JMP</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029782"><span class="hs-identifier hs-var">op</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029781"><span class="hs-identifier hs-var">regs</span></a></span><span>
</span><span id="line-552"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span> </span><span id="local-6989586621681029780"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029780"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span id="local-6989586621681029779"><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029779"><span class="hs-identifier hs-var">ids</span></a></span></span><span> </span><span id="local-6989586621681029778"><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681029778"><span class="hs-identifier hs-var">s</span></a></span></span><span> </span><span id="local-6989586621681029777"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029777"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Maybe JumpDest] -&gt; Section -&gt; CLabel -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-var">JMP_TBL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029780"><span class="hs-identifier hs-var">op</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029779"><span class="hs-identifier hs-var">ids</span></a></span><span> </span><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681029778"><span class="hs-identifier hs-var">s</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029777"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-553"></span><span>
</span><span id="line-554"></span><span>    </span><span class="hs-comment">-- literally only support storing the top x87 stack value st(0)</span><span>
</span><span id="line-555"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#X87Store"><span class="hs-identifier hs-type">X87Store</span></a></span><span>  </span><span id="local-6989586621681029776"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029776"><span class="hs-identifier hs-var">fmt</span></a></span></span><span>  </span><span id="local-6989586621681029775"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029775"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#X87Store"><span class="hs-identifier hs-var">X87Store</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029776"><span class="hs-identifier hs-var">fmt</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; AddrMode
</span><a href="#local-6989586621681029774"><span class="hs-identifier hs-var">lookupAddr</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029775"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-556"></span><span>
</span><span id="line-557"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSS2SD"><span class="hs-identifier hs-type">CVTSS2SD</span></a></span><span> </span><span id="local-6989586621681029773"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029773"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029772"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029772"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CVTSS2SD"><span class="hs-identifier hs-var">CVTSS2SD</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029773"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029772"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-558"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSD2SS"><span class="hs-identifier hs-type">CVTSD2SS</span></a></span><span> </span><span id="local-6989586621681029771"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029771"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029770"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029770"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CVTSD2SS"><span class="hs-identifier hs-var">CVTSD2SS</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029771"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029770"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-559"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSS2SIQ"><span class="hs-identifier hs-type">CVTTSS2SIQ</span></a></span><span> </span><span id="local-6989586621681029769"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029769"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029768"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029768"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029767"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029767"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSS2SIQ"><span class="hs-identifier hs-var">CVTTSS2SIQ</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029769"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029768"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029767"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-560"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSD2SIQ"><span class="hs-identifier hs-type">CVTTSD2SIQ</span></a></span><span> </span><span id="local-6989586621681029766"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029766"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029765"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029765"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029764"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029764"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CVTTSD2SIQ"><span class="hs-identifier hs-var">CVTTSD2SIQ</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029766"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029765"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029764"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-561"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SS"><span class="hs-identifier hs-type">CVTSI2SS</span></a></span><span> </span><span id="local-6989586621681029763"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029763"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029762"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029762"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029761"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029761"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SS"><span class="hs-identifier hs-var">CVTSI2SS</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029763"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029762"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029761"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-562"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SD"><span class="hs-identifier hs-type">CVTSI2SD</span></a></span><span> </span><span id="local-6989586621681029760"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029760"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029759"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029759"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029758"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029758"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CVTSI2SD"><span class="hs-identifier hs-var">CVTSI2SD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029760"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029759"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029758"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-563"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FDIV"><span class="hs-identifier hs-type">FDIV</span></a></span><span> </span><span id="local-6989586621681029757"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029757"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029756"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029756"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029755"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029755"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#FDIV"><span class="hs-identifier hs-var">FDIV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029757"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029756"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029755"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-564"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#SQRT"><span class="hs-identifier hs-type">SQRT</span></a></span><span> </span><span id="local-6989586621681029754"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029754"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029753"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029753"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029752"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029752"><span class="hs-identifier hs-var">dst</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SQRT"><span class="hs-identifier hs-var">SQRT</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029754"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029753"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029752"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-565"></span><span>
</span><span id="line-566"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-type">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-type">Left</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">[Reg]
</span><span class="hs-identifier">_</span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-567"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-type">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-type">Right</span></a></span><span> </span><span id="local-6989586621681029751"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029751"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681029750"><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029750"><span class="hs-identifier hs-var">p</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Either Imm Reg -&gt; [Reg] -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Either Imm Reg
forall a b. b -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Right"><span class="hs-identifier hs-var">Right</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029751"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><a href="#local-6989586621681029750"><span class="hs-identifier hs-var">p</span></a></span><span>
</span><span id="line-568"></span><span>
</span><span id="line-569"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FETCHGOT"><span class="hs-identifier hs-type">FETCHGOT</span></a></span><span> </span><span id="local-6989586621681029749"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029749"><span class="hs-identifier hs-var">reg</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#FETCHGOT"><span class="hs-identifier hs-var">FETCHGOT</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029749"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-570"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#FETCHPC"><span class="hs-identifier hs-type">FETCHPC</span></a></span><span>  </span><span id="local-6989586621681029748"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029748"><span class="hs-identifier hs-var">reg</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#FETCHPC"><span class="hs-identifier hs-var">FETCHPC</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029748"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-571"></span><span>
</span><span id="line-572"></span><span>    </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-573"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#COMMENT"><span class="hs-identifier hs-type">COMMENT</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><span class="hs-identifier">_</span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-574"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCATION"><span class="hs-identifier hs-type">LOCATION</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-575"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#UNWIND"><span class="hs-identifier hs-type">UNWIND</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-576"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DELTA"><span class="hs-identifier hs-type">DELTA</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-577"></span><span>
</span><span id="line-578"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><span class="hs-identifier">_</span></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-579"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX_GBL"><span class="hs-identifier hs-type">JXX_GBL</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-580"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CLTD"><span class="hs-identifier hs-type">CLTD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-581"></span><span>
</span><span id="line-582"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#POPCNT"><span class="hs-identifier hs-type">POPCNT</span></a></span><span> </span><span id="local-6989586621681029747"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029747"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029746"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029746"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029745"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029745"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#POPCNT"><span class="hs-identifier hs-var">POPCNT</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029747"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029746"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029745"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-583"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LZCNT"><span class="hs-identifier hs-type">LZCNT</span></a></span><span>  </span><span id="local-6989586621681029744"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029744"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029743"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029743"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029742"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029742"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#LZCNT"><span class="hs-identifier hs-var">LZCNT</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029744"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029743"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029742"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-584"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#TZCNT"><span class="hs-identifier hs-type">TZCNT</span></a></span><span>  </span><span id="local-6989586621681029741"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029741"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029740"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029740"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029739"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029739"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#TZCNT"><span class="hs-identifier hs-var">TZCNT</span></a></span><span>  </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029741"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029740"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029739"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-585"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PDEP"><span class="hs-identifier hs-type">PDEP</span></a></span><span>   </span><span id="local-6989586621681029738"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029738"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029737"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029737"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029736"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029736"><span class="hs-identifier hs-var">mask</span></a></span></span><span> </span><span id="local-6989586621681029735"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029735"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#PDEP"><span class="hs-identifier hs-var">PDEP</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029738"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029737"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029736"><span class="hs-identifier hs-var">mask</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029735"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-586"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PEXT"><span class="hs-identifier hs-type">PEXT</span></a></span><span>   </span><span id="local-6989586621681029734"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029734"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029733"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029733"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029732"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029732"><span class="hs-identifier hs-var">mask</span></a></span></span><span> </span><span id="local-6989586621681029731"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029731"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#PEXT"><span class="hs-identifier hs-var">PEXT</span></a></span><span>   </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029734"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029733"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029732"><span class="hs-identifier hs-var">mask</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029731"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-587"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSF"><span class="hs-identifier hs-type">BSF</span></a></span><span>    </span><span id="local-6989586621681029730"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029730"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029729"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029729"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029728"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029728"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#BSF"><span class="hs-identifier hs-var">BSF</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029730"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029729"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029728"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-588"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#BSR"><span class="hs-identifier hs-type">BSR</span></a></span><span>    </span><span id="local-6989586621681029727"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029727"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029726"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029726"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029725"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029725"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#BSR"><span class="hs-identifier hs-var">BSR</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029727"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029726"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029725"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-589"></span><span>
</span><span id="line-590"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#PREFETCH"><span class="hs-identifier hs-type">PREFETCH</span></a></span><span> </span><span id="local-6989586621681029724"><span class="annot"><span class="annottext">PrefetchVariant
</span><a href="#local-6989586621681029724"><span class="hs-identifier hs-var">lvl</span></a></span></span><span> </span><span id="local-6989586621681029723"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029723"><span class="hs-identifier hs-var">format</span></a></span></span><span> </span><span id="local-6989586621681029722"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029722"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">PrefetchVariant -&gt; Format -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#PREFETCH"><span class="hs-identifier hs-var">PREFETCH</span></a></span><span> </span><span class="annot"><span class="annottext">PrefetchVariant
</span><a href="#local-6989586621681029724"><span class="hs-identifier hs-var">lvl</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029723"><span class="hs-identifier hs-var">format</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029722"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-591"></span><span>
</span><span id="line-592"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCK"><span class="hs-identifier hs-type">LOCK</span></a></span><span> </span><span id="local-6989586621681029721"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029721"><span class="hs-identifier hs-var">i</span></a></span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#LOCK"><span class="hs-identifier hs-var">LOCK</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr -&gt; (Reg -&gt; Reg) -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchRegsOfInstr"><span class="hs-identifier hs-var">x86_patchRegsOfInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029721"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-593"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XADD"><span class="hs-identifier hs-type">XADD</span></a></span><span> </span><span id="local-6989586621681029720"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029720"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029719"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029719"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029718"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029718"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#XADD"><span class="hs-identifier hs-var">XADD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029720"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029719"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029718"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-594"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CMPXCHG"><span class="hs-identifier hs-type">CMPXCHG</span></a></span><span> </span><span id="local-6989586621681029717"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029717"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029716"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029716"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029715"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029715"><span class="hs-identifier hs-var">dst</span></a></span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; Instr) -&gt; Operand -&gt; Operand -&gt; Instr
forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var">patch2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CMPXCHG"><span class="hs-identifier hs-var">CMPXCHG</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029717"><span class="hs-identifier hs-var">fmt</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029716"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029715"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-595"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#XCHG"><span class="hs-identifier hs-type">XCHG</span></a></span><span> </span><span id="local-6989586621681029714"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029714"><span class="hs-identifier hs-var">fmt</span></a></span></span><span> </span><span id="local-6989586621681029713"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029713"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029712"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029712"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#XCHG"><span class="hs-identifier hs-var">XCHG</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681029714"><span class="hs-identifier hs-var">fmt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029713"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029712"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-596"></span><span>    </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MFENCE"><span class="hs-identifier hs-var">MFENCE</span></a></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029874"><span class="hs-identifier hs-var">instr</span></a></span><span>
</span><span id="line-597"></span><span>
</span><span id="line-598"></span><span>    </span><span id="local-6989586621681029711"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029711"><span class="hs-identifier hs-var">_other</span></a></span></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Instr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;patchRegs: unrecognised instr&quot;</span></span><span>
</span><span id="line-599"></span><span>
</span><span id="line-600"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-601"></span><span>    </span><span id="local-6989586621681030312"><span class="annot"><a href="#local-6989586621681029837"><span class="hs-identifier hs-type">patch1</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681030312"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681030312"><span class="hs-identifier hs-type">a</span></a></span></span><span>
</span><span id="line-602"></span><span>    </span><span id="local-6989586621681029837"><span class="annot"><span class="annottext">patch1 :: forall a. (Operand -&gt; a) -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029837"><span class="hs-identifier hs-var hs-var">patch1</span></a></span></span><span> </span><span id="local-6989586621681029710"><span class="annot"><span class="annottext">Operand -&gt; a
</span><a href="#local-6989586621681029710"><span class="hs-identifier hs-var">insn</span></a></span></span><span> </span><span id="local-6989586621681029709"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029709"><span class="hs-identifier hs-var">op</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; a
</span><a href="#local-6989586621681029710"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; a) -&gt; Operand -&gt; a
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029709"><span class="hs-identifier hs-var">op</span></a></span><span>
</span><span id="line-603"></span><span>    </span><span id="local-6989586621681030313"><span class="annot"><a href="#local-6989586621681029869"><span class="hs-identifier hs-type">patch2</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681030313"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Operand"><span class="hs-identifier hs-type">Operand</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681030313"><span class="hs-identifier hs-type">a</span></a></span></span><span>
</span><span id="line-604"></span><span>    </span><span id="local-6989586621681029869"><span class="annot"><span class="annottext">patch2 :: forall a. (Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029869"><span class="hs-identifier hs-var hs-var">patch2</span></a></span></span><span> </span><span id="local-6989586621681029708"><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029708"><span class="hs-identifier hs-var">insn</span></a></span></span><span> </span><span id="local-6989586621681029707"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029707"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029706"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029706"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Operand -&gt; Operand -&gt; a
</span><a href="#local-6989586621681029708"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; Operand -&gt; a) -&gt; Operand -&gt; Operand -&gt; a
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029707"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(Operand -&gt; a) -&gt; Operand -&gt; a
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029706"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-605"></span><span>
</span><span id="line-606"></span><span>    </span><span id="local-6989586621681029864"><span class="annot"><span class="annottext">patchOp :: Operand -&gt; Operand
</span><a href="#local-6989586621681029864"><span class="hs-identifier hs-var hs-var">patchOp</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span>  </span><span id="local-6989586621681029705"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029705"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">(Reg -&gt; Operand) -&gt; Reg -&gt; Operand
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029705"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-607"></span><span>    </span><span class="annot"><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-type">OpImm</span></a></span><span>  </span><span id="local-6989586621681029704"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029704"><span class="hs-identifier hs-var">imm</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029704"><span class="hs-identifier hs-var">imm</span></a></span><span>
</span><span id="line-608"></span><span>    </span><span class="annot"><a href="#local-6989586621681029864"><span class="hs-identifier hs-var">patchOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-type">OpAddr</span></a></span><span> </span><span id="local-6989586621681029703"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029703"><span class="hs-identifier hs-var">ea</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-var">OpAddr</span></a></span><span> </span><span class="annot"><span class="annottext">(AddrMode -&gt; Operand) -&gt; AddrMode -&gt; Operand
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode -&gt; AddrMode
</span><a href="#local-6989586621681029774"><span class="hs-identifier hs-var">lookupAddr</span></a></span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681029703"><span class="hs-identifier hs-var">ea</span></a></span><span>
</span><span id="line-609"></span><span>
</span><span id="line-610"></span><span>    </span><span id="local-6989586621681029774"><span class="annot"><span class="annottext">lookupAddr :: AddrMode -&gt; AddrMode
</span><a href="#local-6989586621681029774"><span class="hs-identifier hs-var hs-var">lookupAddr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#ImmAddr"><span class="hs-identifier hs-type">ImmAddr</span></a></span><span> </span><span id="local-6989586621681029702"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029702"><span class="hs-identifier hs-var">imm</span></a></span></span><span> </span><span id="local-6989586621681029701"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029701"><span class="hs-identifier hs-var">off</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Imm -&gt; Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmAddr"><span class="hs-identifier hs-var">ImmAddr</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029702"><span class="hs-identifier hs-var">imm</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029701"><span class="hs-identifier hs-var">off</span></a></span><span>
</span><span id="line-611"></span><span>    </span><span class="annot"><a href="#local-6989586621681029774"><span class="hs-identifier hs-var">lookupAddr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#AddrBaseIndex"><span class="hs-identifier hs-type">AddrBaseIndex</span></a></span><span> </span><span id="local-6989586621681029700"><span class="annot"><span class="annottext">EABase
</span><a href="#local-6989586621681029700"><span class="hs-identifier hs-var">base</span></a></span></span><span> </span><span id="local-6989586621681029699"><span class="annot"><span class="annottext">EAIndex
</span><a href="#local-6989586621681029699"><span class="hs-identifier hs-var">index</span></a></span></span><span> </span><span id="local-6989586621681029698"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029698"><span class="hs-identifier hs-var">disp</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-612"></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="annot"><span class="annottext">EABase -&gt; EAIndex -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.X86.Regs.html#AddrBaseIndex"><span class="hs-identifier hs-var">AddrBaseIndex</span></a></span><span> </span><span class="annot"><span class="annottext">(EABase -&gt; EAIndex -&gt; Imm -&gt; AddrMode)
-&gt; EABase -&gt; EAIndex -&gt; Imm -&gt; AddrMode
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">EABase -&gt; EABase
</span><a href="#local-6989586621681029697"><span class="hs-identifier hs-var">lookupBase</span></a></span><span> </span><span class="annot"><span class="annottext">EABase
</span><a href="#local-6989586621681029700"><span class="hs-identifier hs-var">base</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(EAIndex -&gt; Imm -&gt; AddrMode) -&gt; EAIndex -&gt; Imm -&gt; AddrMode
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">EAIndex -&gt; EAIndex
</span><a href="#local-6989586621681029696"><span class="hs-identifier hs-var">lookupIndex</span></a></span><span> </span><span class="annot"><span class="annottext">EAIndex
</span><a href="#local-6989586621681029699"><span class="hs-identifier hs-var">index</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029698"><span class="hs-identifier hs-var">disp</span></a></span><span>
</span><span id="line-613"></span><span>      </span><span class="hs-keyword">where</span><span>
</span><span id="line-614"></span><span>        </span><span id="local-6989586621681029697"><span class="annot"><span class="annottext">lookupBase :: EABase -&gt; EABase
</span><a href="#local-6989586621681029697"><span class="hs-identifier hs-var hs-var">lookupBase</span></a></span></span><span> </span><span class="annot"><span class="annottext">EABase
</span><a href="GHC.CmmToAsm.X86.Regs.html#EABaseNone"><span class="hs-identifier hs-var">EABaseNone</span></a></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EABase
</span><a href="GHC.CmmToAsm.X86.Regs.html#EABaseNone"><span class="hs-identifier hs-var">EABaseNone</span></a></span><span>
</span><span id="line-615"></span><span>        </span><span class="annot"><a href="#local-6989586621681029697"><span class="hs-identifier hs-var">lookupBase</span></a></span><span> </span><span class="annot"><span class="annottext">EABase
</span><a href="GHC.CmmToAsm.X86.Regs.html#EABaseRip"><span class="hs-identifier hs-var">EABaseRip</span></a></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EABase
</span><a href="GHC.CmmToAsm.X86.Regs.html#EABaseRip"><span class="hs-identifier hs-var">EABaseRip</span></a></span><span>
</span><span id="line-616"></span><span>        </span><span class="annot"><a href="#local-6989586621681029697"><span class="hs-identifier hs-var">lookupBase</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#EABaseReg"><span class="hs-identifier hs-type">EABaseReg</span></a></span><span> </span><span id="local-6989586621681029693"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029693"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; EABase
</span><a href="GHC.CmmToAsm.X86.Regs.html#EABaseReg"><span class="hs-identifier hs-var">EABaseReg</span></a></span><span> </span><span class="annot"><span class="annottext">(Reg -&gt; EABase) -&gt; Reg -&gt; EABase
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029693"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><span id="line-617"></span><span>
</span><span id="line-618"></span><span>        </span><span id="local-6989586621681029696"><span class="annot"><span class="annottext">lookupIndex :: EAIndex -&gt; EAIndex
</span><a href="#local-6989586621681029696"><span class="hs-identifier hs-var hs-var">lookupIndex</span></a></span></span><span> </span><span class="annot"><span class="annottext">EAIndex
</span><a href="GHC.CmmToAsm.X86.Regs.html#EAIndexNone"><span class="hs-identifier hs-var">EAIndexNone</span></a></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EAIndex
</span><a href="GHC.CmmToAsm.X86.Regs.html#EAIndexNone"><span class="hs-identifier hs-var">EAIndexNone</span></a></span><span>
</span><span id="line-619"></span><span>        </span><span class="annot"><a href="#local-6989586621681029696"><span class="hs-identifier hs-var">lookupIndex</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#EAIndex"><span class="hs-identifier hs-type">EAIndex</span></a></span><span> </span><span id="local-6989586621681029692"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029692"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span id="local-6989586621681029691"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029691"><span class="hs-identifier hs-var">i</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Int -&gt; EAIndex
</span><a href="GHC.CmmToAsm.X86.Regs.html#EAIndex"><span class="hs-identifier hs-var">EAIndex</span></a></span><span> </span><span class="annot"><span class="annottext">(Reg -&gt; Int -&gt; EAIndex) -&gt; Reg -&gt; Int -&gt; EAIndex
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="#local-6989586621681029873"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029692"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029691"><span class="hs-identifier hs-var">i</span></a></span><span>
</span><span id="line-620"></span><span>
</span><span id="line-621"></span><span>
</span><span id="line-622"></span><span class="hs-comment">--------------------------------------------------------------------------------</span><span>
</span><span id="line-623"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_isJumpishInstr"><span class="hs-identifier hs-type">x86_isJumpishInstr</span></a></span><span>
</span><span id="line-624"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-625"></span><span>
</span><span id="line-626"></span><span id="x86_isJumpishInstr"><span class="annot"><span class="annottext">x86_isJumpishInstr :: Instr -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_isJumpishInstr"><span class="hs-identifier hs-var hs-var">x86_isJumpishInstr</span></a></span></span><span> </span><span id="local-6989586621681029690"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029690"><span class="hs-identifier hs-var">instr</span></a></span></span><span>
</span><span id="line-627"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029690"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-628"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-type">JMP</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-629"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-630"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX_GBL"><span class="hs-identifier hs-type">JXX_GBL</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-631"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-632"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-type">CALL</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-633"></span><span>        </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-634"></span><span>
</span><span id="line-635"></span><span>
</span><span id="line-636"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_jumpDestsOfInstr"><span class="hs-identifier hs-type">x86_jumpDestsOfInstr</span></a></span><span>
</span><span id="line-637"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-638"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-639"></span><span>
</span><span id="line-640"></span><span id="x86_jumpDestsOfInstr"><span class="annot"><span class="annottext">x86_jumpDestsOfInstr :: Instr -&gt; [BlockId]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_jumpDestsOfInstr"><span class="hs-identifier hs-var hs-var">x86_jumpDestsOfInstr</span></a></span></span><span> </span><span id="local-6989586621681029689"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029689"><span class="hs-identifier hs-var">insn</span></a></span></span><span>
</span><span id="line-641"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029689"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-642"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029688"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029688"><span class="hs-identifier hs-var">id</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029688"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-643"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029687"><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029687"><span class="hs-identifier hs-var">ids</span></a></span></span><span> </span><span class="annot"><span class="annottext">Section
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029686"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029686"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029686"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029687"><span class="hs-identifier hs-var">ids</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-644"></span><span>        </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-645"></span><span>
</span><span id="line-646"></span><span>
</span><span id="line-647"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchJumpInstr"><span class="hs-identifier hs-type">x86_patchJumpInstr</span></a></span><span>
</span><span id="line-648"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-649"></span><span>
</span><span id="line-650"></span><span id="x86_patchJumpInstr"><span class="annot"><span class="annottext">x86_patchJumpInstr :: Instr -&gt; (BlockId -&gt; BlockId) -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchJumpInstr"><span class="hs-identifier hs-var hs-var">x86_patchJumpInstr</span></a></span></span><span> </span><span id="local-6989586621681029684"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029684"><span class="hs-identifier hs-var">insn</span></a></span></span><span> </span><span id="local-6989586621681029683"><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><a href="#local-6989586621681029683"><span class="hs-identifier hs-var">patchF</span></a></span></span><span>
</span><span id="line-651"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029684"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-652"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span> </span><span id="local-6989586621681029682"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029682"><span class="hs-identifier hs-var">cc</span></a></span></span><span> </span><span id="local-6989586621681029681"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029681"><span class="hs-identifier hs-var">id</span></a></span></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-var">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029682"><span class="hs-identifier hs-var">cc</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><a href="#local-6989586621681029683"><span class="hs-identifier hs-var">patchF</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029681"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-653"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span> </span><span id="local-6989586621681029680"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029680"><span class="hs-identifier hs-var">op</span></a></span></span><span> </span><span id="local-6989586621681029679"><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029679"><span class="hs-identifier hs-var">ids</span></a></span></span><span> </span><span id="local-6989586621681029678"><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681029678"><span class="hs-identifier hs-var">section</span></a></span></span><span> </span><span id="local-6989586621681029677"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029677"><span class="hs-identifier hs-var">lbl</span></a></span></span><span>
</span><span id="line-654"></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Operand -&gt; [Maybe JumpDest] -&gt; Section -&gt; CLabel -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-var">JMP_TBL</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029680"><span class="hs-identifier hs-var">op</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Maybe JumpDest -&gt; Maybe JumpDest)
-&gt; [Maybe JumpDest] -&gt; [Maybe JumpDest]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(JumpDest -&gt; JumpDest) -&gt; Maybe JumpDest -&gt; Maybe JumpDest
forall (f :: * -&gt; *) a b. Functor f =&gt; (a -&gt; b) -&gt; f a -&gt; f b
</span><a href="../../base/src/GHC.Base.html#fmap"><span class="hs-identifier hs-var">fmap</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(BlockId -&gt; BlockId) -&gt; JumpDest -&gt; JumpDest
</span><a href="#local-6989586621681029676"><span class="hs-identifier hs-var">patchJumpDest</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><a href="#local-6989586621681029683"><span class="hs-identifier hs-var">patchF</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029679"><span class="hs-identifier hs-var">ids</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681029678"><span class="hs-identifier hs-var">section</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029677"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-655"></span><span>        </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029684"><span class="hs-identifier hs-var">insn</span></a></span><span>
</span><span id="line-656"></span><span>    </span><span class="hs-keyword">where</span><span>
</span><span id="line-657"></span><span>        </span><span id="local-6989586621681029676"><span class="annot"><span class="annottext">patchJumpDest :: (BlockId -&gt; BlockId) -&gt; JumpDest -&gt; JumpDest
</span><a href="#local-6989586621681029676"><span class="hs-identifier hs-var hs-var">patchJumpDest</span></a></span></span><span> </span><span id="local-6989586621681029675"><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><a href="#local-6989586621681029675"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029674"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029674"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; JumpDest
</span><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-var">DestBlockId</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><a href="#local-6989586621681029675"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029674"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-658"></span><span>        </span><span class="annot"><a href="#local-6989586621681029676"><span class="hs-identifier hs-var">patchJumpDest</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029673"><span class="annot"><span class="annottext">JumpDest
</span><a href="#local-6989586621681029673"><span class="hs-identifier hs-var">dest</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">JumpDest
</span><a href="#local-6989586621681029673"><span class="hs-identifier hs-var">dest</span></a></span><span>
</span><span id="line-659"></span><span>
</span><span id="line-660"></span><span>
</span><span id="line-661"></span><span>
</span><span id="line-662"></span><span>
</span><span id="line-663"></span><span>
</span><span id="line-664"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-665"></span><span class="hs-comment">-- | Make a spill instruction.</span><span>
</span><span id="line-666"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkSpillInstr"><span class="hs-identifier hs-type">x86_mkSpillInstr</span></a></span><span>
</span><span id="line-667"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Config.html#NCGConfig"><span class="hs-identifier hs-type">NCGConfig</span></a></span><span>
</span><span id="line-668"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>      </span><span class="hs-comment">-- register to spill</span><span>
</span><span id="line-669"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>      </span><span class="hs-comment">-- current stack delta</span><span>
</span><span id="line-670"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>      </span><span class="hs-comment">-- spill slot to use</span><span>
</span><span id="line-671"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-672"></span><span>
</span><span id="line-673"></span><span id="x86_mkSpillInstr"><span class="annot"><span class="annottext">x86_mkSpillInstr :: NCGConfig -&gt; Reg -&gt; Int -&gt; Int -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkSpillInstr"><span class="hs-identifier hs-var hs-var">x86_mkSpillInstr</span></a></span></span><span> </span><span id="local-6989586621681029672"><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029672"><span class="hs-identifier hs-var">config</span></a></span></span><span> </span><span id="local-6989586621681029671"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029671"><span class="hs-identifier hs-var">reg</span></a></span></span><span> </span><span id="local-6989586621681029670"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029670"><span class="hs-identifier hs-var">delta</span></a></span></span><span> </span><span id="local-6989586621681029669"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029669"><span class="hs-identifier hs-var">slot</span></a></span></span><span>
</span><span id="line-674"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681029668"><span class="annot"><span class="annottext">off :: Int
</span><a href="#local-6989586621681029668"><span class="hs-identifier hs-var hs-var">off</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotToOffset"><span class="hs-identifier hs-var">spillSlotToOffset</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029666"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029669"><span class="hs-identifier hs-var">slot</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029670"><span class="hs-identifier hs-var">delta</span></a></span><span>
</span><span id="line-675"></span><span>    </span><span class="hs-keyword">in</span><span>
</span><span id="line-676"></span><span>    </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; RegClass
</span><a href="GHC.CmmToAsm.Reg.Target.html#targetClassOfReg"><span class="hs-identifier hs-var">targetClassOfReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029666"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029671"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-677"></span><span>           </span><span class="annot"><span class="annottext">RegClass
</span><a href="GHC.Platform.Reg.Class.html#RcInteger"><span class="hs-identifier hs-var">RcInteger</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Format
</span><a href="GHC.CmmToAsm.X86.Instr.html#archWordFormat"><span class="hs-identifier hs-var">archWordFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681029663"><span class="hs-identifier hs-var">is32Bit</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-678"></span><span>                              </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029671"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-var">OpAddr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.X86.Regs.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029666"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029668"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-679"></span><span>           </span><span class="annot"><span class="annottext">RegClass
</span><a href="GHC.Platform.Reg.Class.html#RcDouble"><span class="hs-identifier hs-var">RcDouble</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029671"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-var">OpAddr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.X86.Regs.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029666"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029668"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-680"></span><span>           </span><span class="annot"><span class="annottext">RegClass
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Instr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.mkSpillInstr: no match&quot;</span></span><span>
</span><span id="line-681"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029666"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681029666"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; Platform
</span><a href="GHC.CmmToAsm.Config.html#ncgPlatform"><span class="hs-identifier hs-var hs-var">ncgPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029672"><span class="hs-identifier hs-var">config</span></a></span><span>
</span><span id="line-682"></span><span>          </span><span id="local-6989586621681029663"><span class="annot"><span class="annottext">is32Bit :: Bool
</span><a href="#local-6989586621681029663"><span class="hs-identifier hs-var hs-var">is32Bit</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="../../ghc-boot/src/GHC.Platform.html#target32Bit"><span class="hs-identifier hs-var">target32Bit</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029666"><span class="hs-identifier hs-var">platform</span></a></span><span>
</span><span id="line-683"></span><span>
</span><span id="line-684"></span><span class="hs-comment">-- | Make a spill reload instruction.</span><span>
</span><span id="line-685"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkLoadInstr"><span class="hs-identifier hs-type">x86_mkLoadInstr</span></a></span><span>
</span><span id="line-686"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Config.html#NCGConfig"><span class="hs-identifier hs-type">NCGConfig</span></a></span><span>
</span><span id="line-687"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>      </span><span class="hs-comment">-- register to load</span><span>
</span><span id="line-688"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>      </span><span class="hs-comment">-- current stack delta</span><span>
</span><span id="line-689"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>      </span><span class="hs-comment">-- spill slot to use</span><span>
</span><span id="line-690"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-691"></span><span>
</span><span id="line-692"></span><span id="x86_mkLoadInstr"><span class="annot"><span class="annottext">x86_mkLoadInstr :: NCGConfig -&gt; Reg -&gt; Int -&gt; Int -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkLoadInstr"><span class="hs-identifier hs-var hs-var">x86_mkLoadInstr</span></a></span></span><span> </span><span id="local-6989586621681029657"><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029657"><span class="hs-identifier hs-var">config</span></a></span></span><span> </span><span id="local-6989586621681029656"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029656"><span class="hs-identifier hs-var">reg</span></a></span></span><span> </span><span id="local-6989586621681029655"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029655"><span class="hs-identifier hs-var">delta</span></a></span></span><span> </span><span id="local-6989586621681029654"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029654"><span class="hs-identifier hs-var">slot</span></a></span></span><span>
</span><span id="line-693"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681029653"><span class="annot"><span class="annottext">off :: Int
</span><a href="#local-6989586621681029653"><span class="hs-identifier hs-var hs-var">off</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotToOffset"><span class="hs-identifier hs-var">spillSlotToOffset</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029652"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029654"><span class="hs-identifier hs-var">slot</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029655"><span class="hs-identifier hs-var">delta</span></a></span><span>
</span><span id="line-694"></span><span>    </span><span class="hs-keyword">in</span><span>
</span><span id="line-695"></span><span>        </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; RegClass
</span><a href="GHC.CmmToAsm.Reg.Target.html#targetClassOfReg"><span class="hs-identifier hs-var">targetClassOfReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029652"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029656"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-696"></span><span>              </span><span class="annot"><span class="annottext">RegClass
</span><a href="GHC.Platform.Reg.Class.html#RcInteger"><span class="hs-identifier hs-var">RcInteger</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Format
</span><a href="GHC.CmmToAsm.X86.Instr.html#archWordFormat"><span class="hs-identifier hs-var">archWordFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681029651"><span class="hs-identifier hs-var">is32Bit</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-697"></span><span>                               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-var">OpAddr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.X86.Regs.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029652"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029653"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029656"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-698"></span><span>              </span><span class="annot"><span class="annottext">RegClass
</span><a href="GHC.Platform.Reg.Class.html#RcDouble"><span class="hs-identifier hs-var">RcDouble</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">AddrMode -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpAddr"><span class="hs-identifier hs-var">OpAddr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.X86.Regs.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029652"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029653"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029656"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-699"></span><span>              </span><span class="annot"><span class="annottext">RegClass
</span><span class="hs-identifier">_</span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Instr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.x86_mkLoadInstr&quot;</span></span><span>
</span><span id="line-700"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029652"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681029652"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NCGConfig -&gt; Platform
</span><a href="GHC.CmmToAsm.Config.html#ncgPlatform"><span class="hs-identifier hs-var hs-var">ncgPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029657"><span class="hs-identifier hs-var">config</span></a></span><span>
</span><span id="line-701"></span><span>          </span><span id="local-6989586621681029651"><span class="annot"><span class="annottext">is32Bit :: Bool
</span><a href="#local-6989586621681029651"><span class="hs-identifier hs-var hs-var">is32Bit</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="../../ghc-boot/src/GHC.Platform.html#target32Bit"><span class="hs-identifier hs-var">target32Bit</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029652"><span class="hs-identifier hs-var">platform</span></a></span><span>
</span><span id="line-702"></span><span>
</span><span id="line-703"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotSize"><span class="hs-identifier hs-type">spillSlotSize</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-704"></span><span id="spillSlotSize"><span class="annot"><span class="annottext">spillSlotSize :: Platform -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotSize"><span class="hs-identifier hs-var hs-var">spillSlotSize</span></a></span></span><span> </span><span id="local-6989586621681029649"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029649"><span class="hs-identifier hs-var">platform</span></a></span></span><span>
</span><span id="line-705"></span><span>   </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Bool
</span><a href="../../ghc-boot/src/GHC.Platform.html#target32Bit"><span class="hs-identifier hs-var">target32Bit</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029649"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">12</span></span><span>
</span><span id="line-706"></span><span>   </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">8</span></span><span>
</span><span id="line-707"></span><span>
</span><span id="line-708"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#maxSpillSlots"><span class="hs-identifier hs-type">maxSpillSlots</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Config.html#NCGConfig"><span class="hs-identifier hs-type">NCGConfig</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-709"></span><span id="maxSpillSlots"><span class="annot"><span class="annottext">maxSpillSlots :: NCGConfig -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#maxSpillSlots"><span class="hs-identifier hs-var hs-var">maxSpillSlots</span></a></span></span><span> </span><span id="local-6989586621681029648"><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029648"><span class="hs-identifier hs-var">config</span></a></span></span><span>
</span><span id="line-710"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="annot"><span class="annottext">NCGConfig -&gt; Int
</span><a href="GHC.CmmToAsm.Config.html#ncgSpillPreallocSize"><span class="hs-identifier hs-var hs-var">ncgSpillPreallocSize</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029648"><span class="hs-identifier hs-var">config</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">64</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Integral a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Real.html#div"><span class="hs-operator hs-var">`div`</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotSize"><span class="hs-identifier hs-var">spillSlotSize</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NCGConfig -&gt; Platform
</span><a href="GHC.CmmToAsm.Config.html#ncgPlatform"><span class="hs-identifier hs-var hs-var">ncgPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">NCGConfig
</span><a href="#local-6989586621681029648"><span class="hs-identifier hs-var">config</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span>
</span><span id="line-711"></span><span class="hs-comment">--  = 0 -- useful for testing allocMoreStack</span><span>
</span><span id="line-712"></span><span>
</span><span id="line-713"></span><span class="hs-comment">-- number of bytes that the stack pointer should be aligned to</span><span>
</span><span id="line-714"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#stackAlign"><span class="hs-identifier hs-type">stackAlign</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-715"></span><span id="stackAlign"><span class="annot"><span class="annottext">stackAlign :: Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#stackAlign"><span class="hs-identifier hs-var hs-var">stackAlign</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span>
</span><span id="line-716"></span><span>
</span><span id="line-717"></span><span class="hs-comment">-- convert a spill slot number to a *byte* offset, with no sign:</span><span>
</span><span id="line-718"></span><span class="hs-comment">-- decide on a per arch basis whether you are spilling above or below</span><span>
</span><span id="line-719"></span><span class="hs-comment">-- the C stack pointer.</span><span>
</span><span id="line-720"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotToOffset"><span class="hs-identifier hs-type">spillSlotToOffset</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-721"></span><span id="spillSlotToOffset"><span class="annot"><span class="annottext">spillSlotToOffset :: Platform -&gt; Int -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotToOffset"><span class="hs-identifier hs-var hs-var">spillSlotToOffset</span></a></span></span><span> </span><span id="local-6989586621681029644"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029644"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681029643"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029643"><span class="hs-identifier hs-var">slot</span></a></span></span><span>
</span><span id="line-722"></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">64</span></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotSize"><span class="hs-identifier hs-var">spillSlotSize</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029644"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029643"><span class="hs-identifier hs-var">slot</span></a></span><span>
</span><span id="line-723"></span><span>
</span><span id="line-724"></span><span class="hs-comment">--------------------------------------------------------------------------------</span><span>
</span><span id="line-725"></span><span>
</span><span id="line-726"></span><span class="hs-comment">-- | See if this instruction is telling us the current C stack delta</span><span>
</span><span id="line-727"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeDeltaInstr"><span class="hs-identifier hs-type">x86_takeDeltaInstr</span></a></span><span>
</span><span id="line-728"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-729"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-730"></span><span>
</span><span id="line-731"></span><span id="x86_takeDeltaInstr"><span class="annot"><span class="annottext">x86_takeDeltaInstr :: Instr -&gt; Maybe Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeDeltaInstr"><span class="hs-identifier hs-var hs-var">x86_takeDeltaInstr</span></a></span></span><span> </span><span id="local-6989586621681029640"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029640"><span class="hs-identifier hs-var">instr</span></a></span></span><span>
</span><span id="line-732"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029640"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-733"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DELTA"><span class="hs-identifier hs-type">DELTA</span></a></span><span> </span><span id="local-6989586621681029639"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029639"><span class="hs-identifier hs-var">i</span></a></span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Maybe Int
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029639"><span class="hs-identifier hs-var">i</span></a></span><span>
</span><span id="line-734"></span><span>        </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Maybe Int
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-735"></span><span>
</span><span id="line-736"></span><span>
</span><span id="line-737"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_isMetaInstr"><span class="hs-identifier hs-type">x86_isMetaInstr</span></a></span><span>
</span><span id="line-738"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-739"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-740"></span><span>
</span><span id="line-741"></span><span id="x86_isMetaInstr"><span class="annot"><span class="annottext">x86_isMetaInstr :: Instr -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_isMetaInstr"><span class="hs-identifier hs-var hs-var">x86_isMetaInstr</span></a></span></span><span> </span><span id="local-6989586621681029638"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029638"><span class="hs-identifier hs-var">instr</span></a></span></span><span>
</span><span id="line-742"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029638"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-743"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#COMMENT"><span class="hs-identifier hs-type">COMMENT</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-744"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LOCATION"><span class="hs-identifier hs-type">LOCATION</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-745"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#LDATA"><span class="hs-identifier hs-type">LDATA</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-746"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#NEWBLOCK"><span class="hs-identifier hs-type">NEWBLOCK</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-747"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#UNWIND"><span class="hs-identifier hs-type">UNWIND</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-748"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DELTA"><span class="hs-identifier hs-type">DELTA</span></a></span><span class="hs-special">{</span><span class="hs-special">}</span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-749"></span><span>        </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-750"></span><span>
</span><span id="line-751"></span><span>
</span><span id="line-752"></span><span>
</span><span id="line-753"></span><span class="hs-comment">---  TODO: why is there</span><span>
</span><span id="line-754"></span><span class="hs-comment">-- | Make a reg-reg move instruction.</span><span>
</span><span id="line-755"></span><span class="hs-comment">--      On SPARC v8 there are no instructions to move directly between</span><span>
</span><span id="line-756"></span><span class="hs-comment">--      floating point and integer regs. If we need to do that then we</span><span>
</span><span id="line-757"></span><span class="hs-comment">--      have to go via memory.</span><span>
</span><span id="line-758"></span><span class="hs-comment">--</span><span>
</span><span id="line-759"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkRegRegMoveInstr"><span class="hs-identifier hs-type">x86_mkRegRegMoveInstr</span></a></span><span>
</span><span id="line-760"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span>
</span><span id="line-761"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>
</span><span id="line-762"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span>
</span><span id="line-763"></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-764"></span><span>
</span><span id="line-765"></span><span id="x86_mkRegRegMoveInstr"><span class="annot"><span class="annottext">x86_mkRegRegMoveInstr :: Platform -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkRegRegMoveInstr"><span class="hs-identifier hs-var hs-var">x86_mkRegRegMoveInstr</span></a></span></span><span> </span><span id="local-6989586621681029637"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029637"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681029636"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029636"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681029635"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029635"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-766"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Reg -&gt; RegClass
</span><a href="GHC.CmmToAsm.Reg.Target.html#targetClassOfReg"><span class="hs-identifier hs-var">targetClassOfReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029637"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029636"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-767"></span><span>        </span><span class="annot"><span class="annottext">RegClass
</span><a href="GHC.Platform.Reg.Class.html#RcInteger"><span class="hs-identifier hs-var">RcInteger</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformArch"><span class="hs-identifier hs-var">platformArch</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029637"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-768"></span><span>                     </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86"><span class="hs-identifier hs-var">ArchX86</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029636"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029635"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-769"></span><span>                     </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86_64"><span class="hs-identifier hs-var">ArchX86_64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029636"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029635"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-770"></span><span>                     </span><span class="annot"><span class="annottext">Arch
</span><span class="hs-identifier">_</span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Instr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;x86_mkRegRegMoveInstr: Bad arch&quot;</span></span><span>
</span><span id="line-771"></span><span>        </span><span class="annot"><span class="annottext">RegClass
</span><a href="GHC.Platform.Reg.Class.html#RcDouble"><span class="hs-identifier hs-var">RcDouble</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span>  </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029636"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029635"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-772"></span><span>        </span><span class="hs-comment">-- this code is the lie we tell ourselves because both float and double</span><span>
</span><span id="line-773"></span><span>        </span><span class="hs-comment">-- use the same register class.on x86_64 and x86 32bit with SSE2,</span><span>
</span><span id="line-774"></span><span>        </span><span class="hs-comment">-- more plainly, both use the XMM registers</span><span>
</span><span id="line-775"></span><span>        </span><span class="annot"><span class="annottext">RegClass
</span><span class="hs-identifier">_</span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Instr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;X86.RegInfo.mkRegRegMoveInstr: no match&quot;</span></span><span>
</span><span id="line-776"></span><span>
</span><span id="line-777"></span><span class="hs-comment">-- | Check whether an instruction represents a reg-reg move.</span><span>
</span><span id="line-778"></span><span class="hs-comment">--      The register allocator attempts to eliminate reg-&gt;reg moves whenever it can,</span><span>
</span><span id="line-779"></span><span class="hs-comment">--      by assigning the src and dest temporaries to the same real register.</span><span>
</span><span id="line-780"></span><span class="hs-comment">--</span><span>
</span><span id="line-781"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeRegRegMoveInstr"><span class="hs-identifier hs-type">x86_takeRegRegMoveInstr</span></a></span><span>
</span><span id="line-782"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-783"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-784"></span><span>
</span><span id="line-785"></span><span id="x86_takeRegRegMoveInstr"><span class="annot"><span class="annottext">x86_takeRegRegMoveInstr :: Instr -&gt; Maybe (Reg, Reg)
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeRegRegMoveInstr"><span class="hs-identifier hs-var hs-var">x86_takeRegRegMoveInstr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-type">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029631"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029631"><span class="hs-identifier hs-var">r1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-type">OpReg</span></a></span><span> </span><span id="local-6989586621681029630"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029630"><span class="hs-identifier hs-var">r2</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-786"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Reg, Reg) -&gt; Maybe (Reg, Reg)
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029631"><span class="hs-identifier hs-var">r1</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681029630"><span class="hs-identifier hs-var">r2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-787"></span><span>
</span><span id="line-788"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_takeRegRegMoveInstr"><span class="hs-identifier hs-var">x86_takeRegRegMoveInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe (Reg, Reg)
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-789"></span><span>
</span><span id="line-790"></span><span>
</span><span id="line-791"></span><span class="hs-comment">-- | Make an unconditional branch instruction.</span><span>
</span><span id="line-792"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkJumpInstr"><span class="hs-identifier hs-type">x86_mkJumpInstr</span></a></span><span>
</span><span id="line-793"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-794"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-795"></span><span>
</span><span id="line-796"></span><span id="x86_mkJumpInstr"><span class="annot"><span class="annottext">x86_mkJumpInstr :: BlockId -&gt; [Instr]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkJumpInstr"><span class="hs-identifier hs-var hs-var">x86_mkJumpInstr</span></a></span></span><span> </span><span id="local-6989586621681029629"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029629"><span class="hs-identifier hs-var">id</span></a></span></span><span>
</span><span id="line-797"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Cond -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-var">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.X86.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029629"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-798"></span><span>
</span><span id="line-799"></span><span class="hs-comment">-- Note [Windows stack layout]</span><span>
</span><span id="line-800"></span><span class="hs-comment">-- | On most OSes the kernel will place a guard page after the current stack</span><span>
</span><span id="line-801"></span><span class="hs-comment">--   page.  If you allocate larger than a page worth you may jump over this</span><span>
</span><span id="line-802"></span><span class="hs-comment">--   guard page.  Not only is this a security issue, but on certain OSes such</span><span>
</span><span id="line-803"></span><span class="hs-comment">--   as Windows a new page won't be allocated if you don't hit the guard.  This</span><span>
</span><span id="line-804"></span><span class="hs-comment">--   will cause a segfault or access fault.</span><span>
</span><span id="line-805"></span><span class="hs-comment">--</span><span>
</span><span id="line-806"></span><span class="hs-comment">--   This function defines if the current allocation amount requires a probe.</span><span>
</span><span id="line-807"></span><span class="hs-comment">--   On Windows (for now) we emit a call to _chkstk for this.  For other OSes</span><span>
</span><span id="line-808"></span><span class="hs-comment">--   this is not yet implemented.</span><span>
</span><span id="line-809"></span><span class="hs-comment">--   See https://docs.microsoft.com/en-us/windows/desktop/DevNotes/-win32-chkstk</span><span>
</span><span id="line-810"></span><span class="hs-comment">--   The Windows stack looks like this:</span><span>
</span><span id="line-811"></span><span class="hs-comment">--</span><span>
</span><span id="line-812"></span><span class="hs-comment">--                         +-------------------+</span><span>
</span><span id="line-813"></span><span class="hs-comment">--                         |        SP         |</span><span>
</span><span id="line-814"></span><span class="hs-comment">--                         +-------------------+</span><span>
</span><span id="line-815"></span><span class="hs-comment">--                         |                   |</span><span>
</span><span id="line-816"></span><span class="hs-comment">--                         |    GUARD PAGE     |</span><span>
</span><span id="line-817"></span><span class="hs-comment">--                         |                   |</span><span>
</span><span id="line-818"></span><span class="hs-comment">--                         +-------------------+</span><span>
</span><span id="line-819"></span><span class="hs-comment">--                         |                   |</span><span>
</span><span id="line-820"></span><span class="hs-comment">--                         |                   |</span><span>
</span><span id="line-821"></span><span class="hs-comment">--                         |     UNMAPPED      |</span><span>
</span><span id="line-822"></span><span class="hs-comment">--                         |                   |</span><span>
</span><span id="line-823"></span><span class="hs-comment">--                         |                   |</span><span>
</span><span id="line-824"></span><span class="hs-comment">--                         +-------------------+</span><span>
</span><span id="line-825"></span><span class="hs-comment">--</span><span>
</span><span id="line-826"></span><span class="hs-comment">--   In essence each allocation larger than a page size needs to be chunked and</span><span>
</span><span id="line-827"></span><span class="hs-comment">--   a probe emitted after each page allocation.  You have to hit the guard</span><span>
</span><span id="line-828"></span><span class="hs-comment">--   page so the kernel can map in the next page, otherwise you'll segfault.</span><span>
</span><span id="line-829"></span><span class="hs-comment">--</span><span>
</span><span id="line-830"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#needs_probe_call"><span class="hs-identifier hs-type">needs_probe_call</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-831"></span><span id="needs_probe_call"><span class="annot"><span class="annottext">needs_probe_call :: Platform -&gt; Int -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#needs_probe_call"><span class="hs-identifier hs-var hs-var">needs_probe_call</span></a></span></span><span> </span><span id="local-6989586621681029626"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029626"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681029625"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029625"><span class="hs-identifier hs-var">amount</span></a></span></span><span>
</span><span id="line-832"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; OS
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformOS"><span class="hs-identifier hs-var">platformOS</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029626"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-833"></span><span>     </span><span class="annot"><span class="annottext">OS
</span><a href="../../ghc-boot/src/GHC.Platform.html#OSMinGW32"><span class="hs-identifier hs-var">OSMinGW32</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformArch"><span class="hs-identifier hs-var">platformArch</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029626"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-834"></span><span>                    </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86"><span class="hs-identifier hs-var">ArchX86</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029625"><span class="hs-identifier hs-var">amount</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&gt;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">4</span></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1024</span></span><span class="hs-special">)</span><span>
</span><span id="line-835"></span><span>                    </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86_64"><span class="hs-identifier hs-var">ArchX86_64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029625"><span class="hs-identifier hs-var">amount</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&gt;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">8</span></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1024</span></span><span class="hs-special">)</span><span>
</span><span id="line-836"></span><span>                    </span><span class="annot"><span class="annottext">Arch
</span><span class="hs-identifier">_</span></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-837"></span><span>     </span><span class="annot"><span class="annottext">OS
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-838"></span><span>
</span><span id="line-839"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkStackAllocInstr"><span class="hs-identifier hs-type">x86_mkStackAllocInstr</span></a></span><span>
</span><span id="line-840"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span>
</span><span id="line-841"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-842"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-843"></span><span id="x86_mkStackAllocInstr"><span class="annot"><span class="annottext">x86_mkStackAllocInstr :: Platform -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkStackAllocInstr"><span class="hs-identifier hs-var hs-var">x86_mkStackAllocInstr</span></a></span></span><span> </span><span id="local-6989586621681029621"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029621"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681029620"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span></span><span>
</span><span id="line-844"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; OS
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformOS"><span class="hs-identifier hs-var">platformOS</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029621"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-845"></span><span>      </span><span class="annot"><span class="annottext">OS
</span><a href="../../ghc-boot/src/GHC.Platform.html#OSMinGW32"><span class="hs-identifier hs-var">OSMinGW32</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-846"></span><span>        </span><span class="hs-comment">-- These will clobber AX but this should be ok because</span><span>
</span><span id="line-847"></span><span>        </span><span class="hs-comment">--</span><span>
</span><span id="line-848"></span><span>        </span><span class="hs-comment">-- 1. It is the first thing we do when entering the closure and AX is</span><span>
</span><span id="line-849"></span><span>        </span><span class="hs-comment">--    a caller saved registers on Windows both on x86_64 and x86.</span><span>
</span><span id="line-850"></span><span>        </span><span class="hs-comment">--</span><span>
</span><span id="line-851"></span><span>        </span><span class="hs-comment">-- 2. The closures are only entered via a call or longjmp in which case</span><span>
</span><span id="line-852"></span><span>        </span><span class="hs-comment">--    there are no expectations for volatile registers.</span><span>
</span><span id="line-853"></span><span>        </span><span class="hs-comment">--</span><span>
</span><span id="line-854"></span><span>        </span><span class="hs-comment">-- 3. When the target is a local branch point it is re-targeted</span><span>
</span><span id="line-855"></span><span>        </span><span class="hs-comment">--    after the dealloc, preserving #2.  See note [extra spill slots].</span><span>
</span><span id="line-856"></span><span>        </span><span class="hs-comment">--</span><span>
</span><span id="line-857"></span><span>        </span><span class="hs-comment">-- We emit a call because the stack probes are quite involved and</span><span>
</span><span id="line-858"></span><span>        </span><span class="hs-comment">-- would bloat code size a lot.  GHC doesn't really have an -Os.</span><span>
</span><span id="line-859"></span><span>        </span><span class="hs-comment">-- __chkstk is guaranteed to leave all nonvolatile registers and AX</span><span>
</span><span id="line-860"></span><span>        </span><span class="hs-comment">-- untouched.  It's part of the standard prologue code for any Windows</span><span>
</span><span id="line-861"></span><span>        </span><span class="hs-comment">-- function dropping the stack more than a page.</span><span>
</span><span id="line-862"></span><span>        </span><span class="hs-comment">-- See Note [Windows stack layout]</span><span>
</span><span id="line-863"></span><span>        </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformArch"><span class="hs-identifier hs-var">platformArch</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029621"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-864"></span><span>            </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86"><span class="hs-identifier hs-var">ArchX86</span></a></span><span>    </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#needs_probe_call"><span class="hs-identifier hs-var">needs_probe_call</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029621"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-865"></span><span>                           </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-866"></span><span>                           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Either Imm Reg -&gt; [Reg] -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Either Imm Reg
forall a b. a -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; Either Imm Reg) -&gt; Imm -&gt; Either Imm Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#strImmLit"><span class="hs-identifier hs-var">strImmLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;___chkstk_ms&quot;</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-867"></span><span>                           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#eax"><span class="hs-identifier hs-var">eax</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#esp"><span class="hs-identifier hs-var">esp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-868"></span><span>                           </span><span class="hs-special">]</span><span>
</span><span id="line-869"></span><span>                       </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-870"></span><span>                           </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#esp"><span class="hs-identifier hs-var">esp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-871"></span><span>                           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#TEST"><span class="hs-identifier hs-var">TEST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#esp"><span class="hs-identifier hs-var">esp</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#esp"><span class="hs-identifier hs-var">esp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-872"></span><span>                           </span><span class="hs-special">]</span><span>
</span><span id="line-873"></span><span>            </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86_64"><span class="hs-identifier hs-var">ArchX86_64</span></a></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; Bool
</span><a href="GHC.CmmToAsm.X86.Instr.html#needs_probe_call"><span class="hs-identifier hs-var">needs_probe_call</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029621"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-874"></span><span>                           </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#MOV"><span class="hs-identifier hs-var">MOV</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rax"><span class="hs-identifier hs-var">rax</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-875"></span><span>                           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Either Imm Reg -&gt; [Reg] -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#CALL"><span class="hs-identifier hs-var">CALL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Either Imm Reg
forall a b. a -&gt; Either a b
</span><a href="../../base/src/Data.Either.html#Left"><span class="hs-identifier hs-var">Left</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; Either Imm Reg) -&gt; Imm -&gt; Either Imm Reg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#strImmLit"><span class="hs-identifier hs-var">strImmLit</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;___chkstk_ms&quot;</span></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rax"><span class="hs-identifier hs-var">rax</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-876"></span><span>                           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rax"><span class="hs-identifier hs-var">rax</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rsp"><span class="hs-identifier hs-var">rsp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-877"></span><span>                           </span><span class="hs-special">]</span><span>
</span><span id="line-878"></span><span>                       </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-879"></span><span>                           </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rsp"><span class="hs-identifier hs-var">rsp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-880"></span><span>                           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#TEST"><span class="hs-identifier hs-var">TEST</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rsp"><span class="hs-identifier hs-var">rsp</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rsp"><span class="hs-identifier hs-var">rsp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-881"></span><span>                           </span><span class="hs-special">]</span><span>
</span><span id="line-882"></span><span>            </span><span class="annot"><span class="annottext">Arch
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; [Instr]
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;x86_mkStackAllocInstr&quot;</span></span><span>
</span><span id="line-883"></span><span>      </span><span class="annot"><span class="annottext">OS
</span><span class="hs-identifier">_</span></span><span>       </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-884"></span><span>        </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformArch"><span class="hs-identifier hs-var">platformArch</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029621"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-885"></span><span>          </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86"><span class="hs-identifier hs-var">ArchX86</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#esp"><span class="hs-identifier hs-var">esp</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-886"></span><span>          </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86_64"><span class="hs-identifier hs-var">ArchX86_64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029620"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rsp"><span class="hs-identifier hs-var">rsp</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-887"></span><span>          </span><span class="annot"><span class="annottext">Arch
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; [Instr]
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;x86_mkStackAllocInstr&quot;</span></span><span>
</span><span id="line-888"></span><span>
</span><span id="line-889"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkStackDeallocInstr"><span class="hs-identifier hs-type">x86_mkStackDeallocInstr</span></a></span><span>
</span><span id="line-890"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span>
</span><span id="line-891"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-892"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-893"></span><span id="x86_mkStackDeallocInstr"><span class="annot"><span class="annottext">x86_mkStackDeallocInstr :: Platform -&gt; Int -&gt; [Instr]
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_mkStackDeallocInstr"><span class="hs-identifier hs-var hs-var">x86_mkStackDeallocInstr</span></a></span></span><span> </span><span id="local-6989586621681029614"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029614"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681029613"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029613"><span class="hs-identifier hs-var">amount</span></a></span></span><span>
</span><span id="line-894"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#platformArch"><span class="hs-identifier hs-var">platformArch</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029614"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-895"></span><span>      </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86"><span class="hs-identifier hs-var">ArchX86</span></a></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029613"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#esp"><span class="hs-identifier hs-var">esp</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><span id="line-896"></span><span>      </span><span class="annot"><span class="annottext">Arch
</span><a href="../../ghc-boot/src/GHC.Platform.html#ArchX86_64"><span class="hs-identifier hs-var">ArchX86_64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Format -&gt; Operand -&gt; Operand -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-var">OpImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.X86.Regs.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029613"><span class="hs-identifier hs-var">amount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Operand
</span><a href="GHC.CmmToAsm.X86.Instr.html#OpReg"><span class="hs-identifier hs-var">OpReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.X86.Regs.html#rsp"><span class="hs-identifier hs-var">rsp</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><span id="line-897"></span><span>      </span><span class="annot"><span class="annottext">Arch
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; [Instr]
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;x86_mkStackDeallocInstr&quot;</span></span><span>
</span><span id="line-898"></span><span>
</span><span id="line-899"></span><span>
</span><span id="line-900"></span><span class="hs-comment">--</span><span>
</span><span id="line-901"></span><span class="hs-comment">-- Note [extra spill slots]</span><span>
</span><span id="line-902"></span><span class="hs-comment">--</span><span>
</span><span id="line-903"></span><span class="hs-comment">-- If the register allocator used more spill slots than we have</span><span>
</span><span id="line-904"></span><span class="hs-comment">-- pre-allocated (rESERVED_C_STACK_BYTES), then we must allocate more</span><span>
</span><span id="line-905"></span><span class="hs-comment">-- C stack space on entry and exit from this proc.  Therefore we</span><span>
</span><span id="line-906"></span><span class="hs-comment">-- insert a &quot;sub $N, %rsp&quot; at every entry point, and an &quot;add $N, %rsp&quot;</span><span>
</span><span id="line-907"></span><span class="hs-comment">-- before every non-local jump.</span><span>
</span><span id="line-908"></span><span class="hs-comment">--</span><span>
</span><span id="line-909"></span><span class="hs-comment">-- This became necessary when the new codegen started bundling entire</span><span>
</span><span id="line-910"></span><span class="hs-comment">-- functions together into one proc, because the register allocator</span><span>
</span><span id="line-911"></span><span class="hs-comment">-- assigns a different stack slot to each virtual reg within a proc.</span><span>
</span><span id="line-912"></span><span class="hs-comment">-- To avoid using so many slots we could also:</span><span>
</span><span id="line-913"></span><span class="hs-comment">--</span><span>
</span><span id="line-914"></span><span class="hs-comment">--   - split up the proc into connected components before code generator</span><span>
</span><span id="line-915"></span><span class="hs-comment">--</span><span>
</span><span id="line-916"></span><span class="hs-comment">--   - rename the virtual regs, so that we re-use vreg names and hence</span><span>
</span><span id="line-917"></span><span class="hs-comment">--     stack slots for non-overlapping vregs.</span><span>
</span><span id="line-918"></span><span class="hs-comment">--</span><span>
</span><span id="line-919"></span><span class="hs-comment">-- Note that when a block is both a non-local entry point (with an</span><span>
</span><span id="line-920"></span><span class="hs-comment">-- info table) and a local branch target, we have to split it into</span><span>
</span><span id="line-921"></span><span class="hs-comment">-- two, like so:</span><span>
</span><span id="line-922"></span><span class="hs-comment">--</span><span>
</span><span id="line-923"></span><span class="hs-comment">--    &lt;info table&gt;</span><span>
</span><span id="line-924"></span><span class="hs-comment">--    L:</span><span>
</span><span id="line-925"></span><span class="hs-comment">--       &lt;code&gt;</span><span>
</span><span id="line-926"></span><span class="hs-comment">--</span><span>
</span><span id="line-927"></span><span class="hs-comment">-- becomes</span><span>
</span><span id="line-928"></span><span class="hs-comment">--</span><span>
</span><span id="line-929"></span><span class="hs-comment">--    &lt;info table&gt;</span><span>
</span><span id="line-930"></span><span class="hs-comment">--    L:</span><span>
</span><span id="line-931"></span><span class="hs-comment">--       subl $rsp, N</span><span>
</span><span id="line-932"></span><span class="hs-comment">--       jmp Lnew</span><span>
</span><span id="line-933"></span><span class="hs-comment">--    Lnew:</span><span>
</span><span id="line-934"></span><span class="hs-comment">--       &lt;code&gt;</span><span>
</span><span id="line-935"></span><span class="hs-comment">--</span><span>
</span><span id="line-936"></span><span class="hs-comment">-- and all branches pointing to L are retargetted to point to Lnew.</span><span>
</span><span id="line-937"></span><span class="hs-comment">-- Otherwise, we would repeat the $rsp adjustment for each branch to</span><span>
</span><span id="line-938"></span><span class="hs-comment">-- L.</span><span>
</span><span id="line-939"></span><span class="hs-comment">--</span><span>
</span><span id="line-940"></span><span class="hs-comment">-- Returns a list of (L,Lnew) pairs.</span><span>
</span><span id="line-941"></span><span class="hs-comment">--</span><span>
</span><span id="line-942"></span><span id="local-6989586621681030296"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#allocMoreStack"><span class="hs-identifier hs-type">allocMoreStack</span></a></span><span>
</span><span id="line-943"></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../ghc-boot/src/GHC.Platform.html#Platform"><span class="hs-identifier hs-type">Platform</span></a></span><span>
</span><span id="line-944"></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span>
</span><span id="line-945"></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681030296"><span class="hs-identifier hs-type">statics</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">GHC.CmmToAsm.X86.Instr.Instr</span></a></span><span>
</span><span id="line-946"></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Supply.html#UniqSM"><span class="hs-identifier hs-type">UniqSM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.Instr.html#NatCmmDecl"><span class="hs-identifier hs-type">NatCmmDecl</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681030296"><span class="hs-identifier hs-type">statics</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">GHC.CmmToAsm.X86.Instr.Instr</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">)</span></span><span>
</span><span id="line-947"></span><span>
</span><span id="line-948"></span><span id="allocMoreStack"><span class="annot"><span class="annottext">allocMoreStack :: forall statics.
Platform
-&gt; Int
-&gt; NatCmmDecl statics Instr
-&gt; UniqSM (NatCmmDecl statics Instr, [(BlockId, BlockId)])
</span><a href="GHC.CmmToAsm.X86.Instr.html#allocMoreStack"><span class="hs-identifier hs-var hs-var">allocMoreStack</span></a></span></span><span> </span><span class="annot"><span class="annottext">Platform
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029589"><span class="annot"><span class="annottext">top :: NatCmmDecl statics Instr
</span><a href="#local-6989586621681029589"><span class="hs-identifier hs-var">top</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#CmmData"><span class="hs-identifier hs-type">CmmData</span></a></span><span> </span><span class="annot"><span class="annottext">Section
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">statics
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(NatCmmDecl statics Instr, [(BlockId, BlockId)])
-&gt; UniqSM (NatCmmDecl statics Instr, [(BlockId, BlockId)])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">NatCmmDecl statics Instr
</span><a href="#local-6989586621681029589"><span class="hs-identifier hs-var">top</span></a></span><span class="hs-special">,</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-949"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#allocMoreStack"><span class="hs-identifier hs-var">allocMoreStack</span></a></span><span> </span><span id="local-6989586621681029587"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029587"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span id="local-6989586621681029586"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029586"><span class="hs-identifier hs-var">slots</span></a></span></span><span> </span><span id="local-6989586621681029585"><span class="annot"><span class="annottext">proc :: NatCmmDecl statics Instr
</span><a href="#local-6989586621681029585"><span class="hs-identifier hs-var">proc</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#CmmProc"><span class="hs-identifier hs-type">CmmProc</span></a></span><span> </span><span id="local-6989586621681029583"><span class="annot"><span class="annottext">LabelMap RawCmmStatics
</span><a href="#local-6989586621681029583"><span class="hs-identifier hs-var">info</span></a></span></span><span> </span><span id="local-6989586621681029582"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029582"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span id="local-6989586621681029581"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681029581"><span class="hs-identifier hs-var">live</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#ListGraph"><span class="hs-identifier hs-type">ListGraph</span></a></span><span> </span><span id="local-6989586621681029579"><span class="annot"><span class="annottext">[GenBasicBlock Instr]
</span><a href="#local-6989586621681029579"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-950"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681029578"><span class="annot"><span class="annottext">entries :: [BlockId]
</span><a href="#local-6989586621681029578"><span class="hs-identifier hs-var hs-var">entries</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">NatCmmDecl statics Instr -&gt; [BlockId]
forall a i b. GenCmmDecl a (LabelMap i) (ListGraph b) -&gt; [BlockId]
</span><a href="GHC.CmmToAsm.Instr.html#entryBlocks"><span class="hs-identifier hs-var">entryBlocks</span></a></span><span> </span><span class="annot"><span class="annottext">NatCmmDecl statics Instr
</span><a href="#local-6989586621681029585"><span class="hs-identifier hs-var">proc</span></a></span><span>
</span><span id="line-951"></span><span>
</span><span id="line-952"></span><span>    </span><span id="local-6989586621681029576"><span class="annot"><span class="annottext">[Unique]
</span><a href="#local-6989586621681029576"><span class="hs-identifier hs-var">uniqs</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Int -&gt; UniqSM Unique -&gt; UniqSM [Unique]
forall (m :: * -&gt; *) a. Applicative m =&gt; Int -&gt; m a -&gt; m [a]
</span><a href="../../base/src/Control.Monad.html#replicateM"><span class="hs-identifier hs-var">replicateM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[BlockId] -&gt; Int
forall (t :: * -&gt; *) a. Foldable t =&gt; t a -&gt; Int
</span><a href="../../base/src/Data.Foldable.html#length"><span class="hs-identifier hs-var">length</span></a></span><span> </span><span class="annot"><span class="annottext">[BlockId]
</span><a href="#local-6989586621681029578"><span class="hs-identifier hs-var">entries</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">UniqSM Unique
forall (m :: * -&gt; *). MonadUnique m =&gt; m Unique
</span><a href="GHC.Types.Unique.Supply.html#getUniqueM"><span class="hs-identifier hs-var">getUniqueM</span></a></span><span>
</span><span id="line-953"></span><span>
</span><span id="line-954"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-955"></span><span>      </span><span id="local-6989586621681029572"><span class="annot"><span class="annottext">delta :: Int
</span><a href="#local-6989586621681029572"><span class="hs-identifier hs-var hs-var">delta</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029571"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2B"><span class="hs-operator hs-var">+</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#stackAlign"><span class="hs-identifier hs-var">stackAlign</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#-"><span class="hs-glyph hs-var">-</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Integral a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Real.html#quot"><span class="hs-operator hs-var">`quot`</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#stackAlign"><span class="hs-identifier hs-var">stackAlign</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#stackAlign"><span class="hs-identifier hs-var">stackAlign</span></a></span><span> </span><span class="hs-comment">-- round up</span><span>
</span><span id="line-956"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029571"><span class="annot"><span class="annottext">x :: Int
</span><a href="#local-6989586621681029571"><span class="hs-identifier hs-var hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029586"><span class="hs-identifier hs-var">slots</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Int
forall a. Num a =&gt; a -&gt; a -&gt; a
</span><a href="../../base/src/GHC.Num.html#%2A"><span class="hs-operator hs-var">*</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int
</span><a href="GHC.CmmToAsm.X86.Instr.html#spillSlotSize"><span class="hs-identifier hs-var">spillSlotSize</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029587"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-comment">-- sp delta</span><span>
</span><span id="line-957"></span><span>
</span><span id="line-958"></span><span>      </span><span id="local-6989586621681029569"><span class="annot"><span class="annottext">alloc :: [Instr]
</span><a href="#local-6989586621681029569"><span class="hs-identifier hs-var hs-var">alloc</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; [Instr]
forall instr. Instruction instr =&gt; Platform -&gt; Int -&gt; [instr]
</span><a href="GHC.CmmToAsm.Instr.html#mkStackAllocInstr"><span class="hs-identifier hs-var">mkStackAllocInstr</span></a></span><span>   </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029587"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029572"><span class="hs-identifier hs-var">delta</span></a></span><span>
</span><span id="line-959"></span><span>      </span><span id="local-6989586621681029568"><span class="annot"><span class="annottext">dealloc :: [Instr]
</span><a href="#local-6989586621681029568"><span class="hs-identifier hs-var hs-var">dealloc</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Int -&gt; [Instr]
forall instr. Instruction instr =&gt; Platform -&gt; Int -&gt; [instr]
</span><a href="GHC.CmmToAsm.Instr.html#mkStackDeallocInstr"><span class="hs-identifier hs-var">mkStackDeallocInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681029587"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029572"><span class="hs-identifier hs-var">delta</span></a></span><span>
</span><span id="line-960"></span><span>
</span><span id="line-961"></span><span>      </span><span id="local-6989586621681029567"><span class="annot"><span class="annottext">retargetList :: [(BlockId, BlockId)]
</span><a href="#local-6989586621681029567"><span class="hs-identifier hs-var hs-var">retargetList</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[BlockId] -&gt; [BlockId] -&gt; [(BlockId, BlockId)]
forall a b. [a] -&gt; [b] -&gt; [(a, b)]
</span><a href="../../base/src/GHC.List.html#zip"><span class="hs-identifier hs-var">zip</span></a></span><span> </span><span class="annot"><span class="annottext">[BlockId]
</span><a href="#local-6989586621681029578"><span class="hs-identifier hs-var">entries</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Unique -&gt; BlockId) -&gt; [Unique] -&gt; [BlockId]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Unique -&gt; BlockId
</span><a href="GHC.Cmm.BlockId.html#mkBlockId"><span class="hs-identifier hs-var">mkBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">[Unique]
</span><a href="#local-6989586621681029576"><span class="hs-identifier hs-var">uniqs</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-962"></span><span>
</span><span id="line-963"></span><span>      </span><span class="annot"><a href="#local-6989586621681029565"><span class="hs-identifier hs-type">new_blockmap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html#LabelMap"><span class="hs-identifier hs-type">LabelMap</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-964"></span><span>      </span><span id="local-6989586621681029565"><span class="annot"><span class="annottext">new_blockmap :: LabelMap BlockId
</span><a href="#local-6989586621681029565"><span class="hs-identifier hs-var hs-var">new_blockmap</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[(KeyOf LabelMap, BlockId)] -&gt; LabelMap BlockId
forall (map :: * -&gt; *) a. IsMap map =&gt; [(KeyOf map, a)] -&gt; map a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapFromList"><span class="hs-identifier hs-var">mapFromList</span></a></span><span> </span><span class="annot"><span class="annottext">[(KeyOf LabelMap, BlockId)]
[(BlockId, BlockId)]
</span><a href="#local-6989586621681029567"><span class="hs-identifier hs-var">retargetList</span></a></span><span>
</span><span id="line-965"></span><span>
</span><span id="line-966"></span><span>      </span><span id="local-6989586621681029563"><span class="annot"><span class="annottext">insert_stack_insns :: GenBasicBlock Instr -&gt; [GenBasicBlock Instr]
</span><a href="#local-6989586621681029563"><span class="hs-identifier hs-var hs-var">insert_stack_insns</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-type">BasicBlock</span></a></span><span> </span><span id="local-6989586621681029561"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029561"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621681029560"><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029560"><span class="hs-identifier hs-var">insns</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-967"></span><span>         </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621681029559"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029559"><span class="hs-identifier hs-var">new_blockid</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">KeyOf LabelMap -&gt; LabelMap BlockId -&gt; Maybe BlockId
forall (map :: * -&gt; *) a.
IsMap map =&gt;
KeyOf map -&gt; map a -&gt; Maybe a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapLookup"><span class="hs-identifier hs-var">mapLookup</span></a></span><span> </span><span class="annot"><span class="annottext">KeyOf LabelMap
BlockId
</span><a href="#local-6989586621681029561"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">LabelMap BlockId
</span><a href="#local-6989586621681029565"><span class="hs-identifier hs-var">new_blockmap</span></a></span><span>
</span><span id="line-968"></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; [Instr] -&gt; GenBasicBlock Instr
forall i. BlockId -&gt; [i] -&gt; GenBasicBlock i
</span><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-var">BasicBlock</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029561"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">([Instr] -&gt; GenBasicBlock Instr) -&gt; [Instr] -&gt; GenBasicBlock Instr
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029569"><span class="hs-identifier hs-var">alloc</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; [Instr] -&gt; [Instr]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Cond -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-var">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.X86.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029559"><span class="hs-identifier hs-var">new_blockid</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-969"></span><span>           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; [Instr] -&gt; GenBasicBlock Instr
forall i. BlockId -&gt; [i] -&gt; GenBasicBlock i
</span><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-var">BasicBlock</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029559"><span class="hs-identifier hs-var">new_blockid</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029557"><span class="hs-identifier hs-var">block'</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-970"></span><span>         </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-971"></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; [Instr] -&gt; GenBasicBlock Instr
forall i. BlockId -&gt; [i] -&gt; GenBasicBlock i
</span><a href="GHC.Cmm.html#BasicBlock"><span class="hs-identifier hs-var">BasicBlock</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029561"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029557"><span class="hs-identifier hs-var">block'</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-972"></span><span>         </span><span class="hs-keyword">where</span><span>
</span><span id="line-973"></span><span>           </span><span id="local-6989586621681029557"><span class="annot"><span class="annottext">block' :: [Instr]
</span><a href="#local-6989586621681029557"><span class="hs-identifier hs-var hs-var">block'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Instr -&gt; [Instr] -&gt; [Instr]) -&gt; [Instr] -&gt; [Instr] -&gt; [Instr]
forall (t :: * -&gt; *) a b.
Foldable t =&gt;
(a -&gt; b -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldr"><span class="hs-identifier hs-var">foldr</span></a></span><span> </span><span class="annot"><span class="annottext">Instr -&gt; [Instr] -&gt; [Instr]
</span><a href="#local-6989586621681029555"><span class="hs-identifier hs-var">insert_dealloc</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029560"><span class="hs-identifier hs-var">insns</span></a></span><span>
</span><span id="line-974"></span><span>
</span><span id="line-975"></span><span>      </span><span id="local-6989586621681029555"><span class="annot"><span class="annottext">insert_dealloc :: Instr -&gt; [Instr] -&gt; [Instr]
</span><a href="#local-6989586621681029555"><span class="hs-identifier hs-var hs-var">insert_dealloc</span></a></span></span><span> </span><span id="local-6989586621681029554"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029554"><span class="hs-identifier hs-var">insn</span></a></span></span><span> </span><span id="local-6989586621681029553"><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029553"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029554"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-976"></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-type">JMP</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><span class="hs-identifier">_</span></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029568"><span class="hs-identifier hs-var">dealloc</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; [Instr] -&gt; [Instr]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029554"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="annot"><span class="annottext">Instr -&gt; [Instr] -&gt; [Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029553"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-977"></span><span>         </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX_GBL"><span class="hs-identifier hs-type">JXX_GBL</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Imm
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; [Instr]
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;insert_dealloc: cannot handle JXX_GBL&quot;</span></span><span>
</span><span id="line-978"></span><span>         </span><span id="local-6989586621681029552"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029552"><span class="hs-identifier hs-var">_other</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; (BlockId -&gt; BlockId) -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#x86_patchJumpInstr"><span class="hs-identifier hs-var">x86_patchJumpInstr</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029554"><span class="hs-identifier hs-var">insn</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId
</span><a href="#local-6989586621681029551"><span class="hs-identifier hs-var">retarget</span></a></span><span> </span><span class="annot"><span class="annottext">Instr -&gt; [Instr] -&gt; [Instr]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Instr]
</span><a href="#local-6989586621681029553"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><span id="line-979"></span><span>           </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029551"><span class="annot"><span class="annottext">retarget :: BlockId -&gt; BlockId
</span><a href="#local-6989586621681029551"><span class="hs-identifier hs-var hs-var">retarget</span></a></span></span><span> </span><span id="local-6989586621681029549"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029549"><span class="hs-identifier hs-var">b</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe BlockId -&gt; BlockId
forall a. a -&gt; Maybe a -&gt; a
</span><a href="../../base/src/Data.Maybe.html#fromMaybe"><span class="hs-identifier hs-var">fromMaybe</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029549"><span class="hs-identifier hs-var">b</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">KeyOf LabelMap -&gt; LabelMap BlockId -&gt; Maybe BlockId
forall (map :: * -&gt; *) a.
IsMap map =&gt;
KeyOf map -&gt; map a -&gt; Maybe a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapLookup"><span class="hs-identifier hs-var">mapLookup</span></a></span><span> </span><span class="annot"><span class="annottext">KeyOf LabelMap
BlockId
</span><a href="#local-6989586621681029549"><span class="hs-identifier hs-var">b</span></a></span><span> </span><span class="annot"><span class="annottext">LabelMap BlockId
</span><a href="#local-6989586621681029565"><span class="hs-identifier hs-var">new_blockmap</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-980"></span><span>
</span><span id="line-981"></span><span>      </span><span id="local-6989586621681029548"><span class="annot"><span class="annottext">new_code :: [GenBasicBlock Instr]
</span><a href="#local-6989586621681029548"><span class="hs-identifier hs-var hs-var">new_code</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(GenBasicBlock Instr -&gt; [GenBasicBlock Instr])
-&gt; [GenBasicBlock Instr] -&gt; [GenBasicBlock Instr]
forall (t :: * -&gt; *) a b. Foldable t =&gt; (a -&gt; [b]) -&gt; t a -&gt; [b]
</span><a href="../../base/src/Data.Foldable.html#concatMap"><span class="hs-identifier hs-var">concatMap</span></a></span><span> </span><span class="annot"><span class="annottext">GenBasicBlock Instr -&gt; [GenBasicBlock Instr]
</span><a href="#local-6989586621681029563"><span class="hs-identifier hs-var">insert_stack_insns</span></a></span><span> </span><span class="annot"><span class="annottext">[GenBasicBlock Instr]
</span><a href="#local-6989586621681029579"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-982"></span><span>    </span><span class="hs-comment">-- in</span><span>
</span><span id="line-983"></span><span>    </span><span class="annot"><span class="annottext">(NatCmmDecl statics Instr, [(BlockId, BlockId)])
-&gt; UniqSM (NatCmmDecl statics Instr, [(BlockId, BlockId)])
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">LabelMap RawCmmStatics
-&gt; CLabel
-&gt; [GlobalReg]
-&gt; ListGraph Instr
-&gt; NatCmmDecl statics Instr
forall d h g. h -&gt; CLabel -&gt; [GlobalReg] -&gt; g -&gt; GenCmmDecl d h g
</span><a href="GHC.Cmm.html#CmmProc"><span class="hs-identifier hs-var">CmmProc</span></a></span><span> </span><span class="annot"><span class="annottext">LabelMap RawCmmStatics
</span><a href="#local-6989586621681029583"><span class="hs-identifier hs-var">info</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029582"><span class="hs-identifier hs-var">lbl</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681029581"><span class="hs-identifier hs-var">live</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[GenBasicBlock Instr] -&gt; ListGraph Instr
forall i. [GenBasicBlock i] -&gt; ListGraph i
</span><a href="GHC.Cmm.html#ListGraph"><span class="hs-identifier hs-var">ListGraph</span></a></span><span> </span><span class="annot"><span class="annottext">[GenBasicBlock Instr]
</span><a href="#local-6989586621681029548"><span class="hs-identifier hs-var">new_code</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[(BlockId, BlockId)]
</span><a href="#local-6989586621681029567"><span class="hs-identifier hs-var">retargetList</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-984"></span><span>
</span><span id="line-985"></span><span class="hs-keyword">data</span><span> </span><span id="JumpDest"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-var">JumpDest</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="DestBlockId"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-var">DestBlockId</span></a></span></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="DestImm"><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestImm"><span class="hs-identifier hs-var">DestImm</span></a></span></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#Imm"><span class="hs-identifier hs-type">Imm</span></a></span><span>
</span><span id="line-986"></span><span>
</span><span id="line-987"></span><span class="hs-comment">-- Debug Instance</span><span>
</span><span id="line-988"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621681029543"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-989"></span><span>  </span><span id="local-6989586621681029539"><span class="annot"><span class="annottext">ppr :: JumpDest -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029537"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029537"><span class="hs-identifier hs-var">bid</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;jd&lt;blk&gt;:&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029537"><span class="hs-identifier hs-var">bid</span></a></span><span>
</span><span id="line-990"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestImm"><span class="hs-identifier hs-type">DestImm</span></a></span><span> </span><span id="local-6989586621681029534"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029534"><span class="hs-identifier hs-var">_imm</span></a></span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;jd&lt;imm&gt;:noShow&quot;</span></span><span>
</span><span id="line-991"></span><span>
</span><span id="line-992"></span><span>
</span><span id="line-993"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#getJumpDestBlockId"><span class="hs-identifier hs-type">getJumpDestBlockId</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-994"></span><span id="getJumpDestBlockId"><span class="annot"><span class="annottext">getJumpDestBlockId :: JumpDest -&gt; Maybe BlockId
</span><a href="GHC.CmmToAsm.X86.Instr.html#getJumpDestBlockId"><span class="hs-identifier hs-var hs-var">getJumpDestBlockId</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029533"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029533"><span class="hs-identifier hs-var">bid</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe BlockId
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029533"><span class="hs-identifier hs-var">bid</span></a></span><span>
</span><span id="line-995"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#getJumpDestBlockId"><span class="hs-identifier hs-var">getJumpDestBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">JumpDest
</span><span class="hs-identifier">_</span></span><span>                 </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-996"></span><span>
</span><span id="line-997"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#canShortcut"><span class="hs-identifier hs-type">canShortcut</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span>
</span><span id="line-998"></span><span id="canShortcut"><span class="annot"><span class="annottext">canShortcut :: Instr -&gt; Maybe JumpDest
</span><a href="GHC.CmmToAsm.X86.Instr.html#canShortcut"><span class="hs-identifier hs-var hs-var">canShortcut</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.X86.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span id="local-6989586621681029532"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029532"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">JumpDest -&gt; Maybe JumpDest
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; JumpDest
</span><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-var">DestBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029532"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-999"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#canShortcut"><span class="hs-identifier hs-var">canShortcut</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP"><span class="hs-identifier hs-type">JMP</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#OpImm"><span class="hs-identifier hs-type">OpImm</span></a></span><span> </span><span id="local-6989586621681029531"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029531"><span class="hs-identifier hs-var">imm</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Reg]
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">JumpDest -&gt; Maybe JumpDest
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; JumpDest
</span><a href="GHC.CmmToAsm.X86.Instr.html#DestImm"><span class="hs-identifier hs-var">DestImm</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029531"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1000"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#canShortcut"><span class="hs-identifier hs-var">canShortcut</span></a></span><span> </span><span class="annot"><span class="annottext">Instr
</span><span class="hs-identifier">_</span></span><span>                    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe JumpDest
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-1001"></span><span>
</span><span id="line-1002"></span><span>
</span><span id="line-1003"></span><span class="hs-comment">-- This helper shortcuts a sequence of branches.</span><span>
</span><span id="line-1004"></span><span class="hs-comment">-- The blockset helps avoid following cycles.</span><span>
</span><span id="line-1005"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutJump"><span class="hs-identifier hs-type">shortcutJump</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-1006"></span><span id="shortcutJump"><span class="annot"><span class="annottext">shortcutJump :: (BlockId -&gt; Maybe JumpDest) -&gt; Instr -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutJump"><span class="hs-identifier hs-var hs-var">shortcutJump</span></a></span></span><span> </span><span id="local-6989586621681029530"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029530"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span id="local-6989586621681029529"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029529"><span class="hs-identifier hs-var">insn</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; LabelSet -&gt; Instr -&gt; Instr
</span><a href="#local-6989586621681029528"><span class="hs-identifier hs-var">shortcutJump'</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029530"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">LabelSet
forall set. IsSet set =&gt; set
</span><a href="GHC.Cmm.Dataflow.Collections.html#setEmpty"><span class="hs-identifier hs-var">setEmpty</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html#LabelSet"><span class="hs-identifier hs-type">LabelSet</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029529"><span class="hs-identifier hs-var">insn</span></a></span><span>
</span><span id="line-1007"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-1008"></span><span>    </span><span class="annot"><a href="#local-6989586621681029528"><span class="hs-identifier hs-type">shortcutJump'</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html#LabelSet"><span class="hs-identifier hs-type">LabelSet</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span>
</span><span id="line-1009"></span><span>    </span><span id="local-6989586621681029528"><span class="annot"><span class="annottext">shortcutJump' :: (BlockId -&gt; Maybe JumpDest) -&gt; LabelSet -&gt; Instr -&gt; Instr
</span><a href="#local-6989586621681029528"><span class="hs-identifier hs-var hs-var">shortcutJump'</span></a></span></span><span> </span><span id="local-6989586621681029526"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029526"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span id="local-6989586621681029525"><span class="annot"><span class="annottext">LabelSet
</span><a href="#local-6989586621681029525"><span class="hs-identifier hs-var">seen</span></a></span></span><span> </span><span id="local-6989586621681029524"><span class="annot"><span class="annottext">insn :: Instr
</span><a href="#local-6989586621681029524"><span class="hs-identifier hs-var">insn</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-type">JXX</span></a></span><span> </span><span id="local-6989586621681029523"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029523"><span class="hs-identifier hs-var">cc</span></a></span></span><span> </span><span id="local-6989586621681029522"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029522"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-1010"></span><span>        </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">ElemOf LabelSet -&gt; LabelSet -&gt; Bool
forall set. IsSet set =&gt; ElemOf set -&gt; set -&gt; Bool
</span><a href="GHC.Cmm.Dataflow.Collections.html#setMember"><span class="hs-identifier hs-var">setMember</span></a></span><span> </span><span class="annot"><span class="annottext">ElemOf LabelSet
BlockId
</span><a href="#local-6989586621681029522"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">LabelSet
</span><a href="#local-6989586621681029525"><span class="hs-identifier hs-var">seen</span></a></span><span> </span><span class="hs-keyword">then</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029524"><span class="hs-identifier hs-var">insn</span></a></span><span>
</span><span id="line-1011"></span><span>        </span><span class="hs-keyword">else</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029526"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029522"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-1012"></span><span>            </span><span class="annot"><span class="annottext">Maybe JumpDest
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029524"><span class="hs-identifier hs-var">insn</span></a></span><span>
</span><span id="line-1013"></span><span>            </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029520"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029520"><span class="hs-identifier hs-var">id'</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; LabelSet -&gt; Instr -&gt; Instr
</span><a href="#local-6989586621681029528"><span class="hs-identifier hs-var">shortcutJump'</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029526"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">LabelSet
</span><a href="#local-6989586621681029519"><span class="hs-identifier hs-var">seen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Cond -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JXX"><span class="hs-identifier hs-var">JXX</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029523"><span class="hs-identifier hs-var">cc</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029520"><span class="hs-identifier hs-var">id'</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1014"></span><span>            </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestImm"><span class="hs-identifier hs-type">DestImm</span></a></span><span> </span><span id="local-6989586621681029518"><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029518"><span class="hs-identifier hs-var">imm</span></a></span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; LabelSet -&gt; Instr -&gt; Instr
</span><a href="#local-6989586621681029528"><span class="hs-identifier hs-var">shortcutJump'</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029526"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">LabelSet
</span><a href="#local-6989586621681029519"><span class="hs-identifier hs-var">seen'</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Cond -&gt; Imm -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JXX_GBL"><span class="hs-identifier hs-var">JXX_GBL</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681029523"><span class="hs-identifier hs-var">cc</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681029518"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1015"></span><span>        </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029519"><span class="annot"><span class="annottext">seen' :: LabelSet
</span><a href="#local-6989586621681029519"><span class="hs-identifier hs-var hs-var">seen'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">ElemOf LabelSet -&gt; LabelSet -&gt; LabelSet
forall set. IsSet set =&gt; ElemOf set -&gt; set -&gt; set
</span><a href="GHC.Cmm.Dataflow.Collections.html#setInsert"><span class="hs-identifier hs-var">setInsert</span></a></span><span> </span><span class="annot"><span class="annottext">ElemOf LabelSet
BlockId
</span><a href="#local-6989586621681029522"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">LabelSet
</span><a href="#local-6989586621681029525"><span class="hs-identifier hs-var">seen</span></a></span><span>
</span><span id="line-1016"></span><span>    </span><span class="annot"><a href="#local-6989586621681029528"><span class="hs-identifier hs-var">shortcutJump'</span></a></span><span> </span><span id="local-6989586621681029516"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029516"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span class="annot"><span class="annottext">LabelSet
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-type">JMP_TBL</span></a></span><span> </span><span id="local-6989586621681029515"><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029515"><span class="hs-identifier hs-var">addr</span></a></span></span><span> </span><span id="local-6989586621681029514"><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029514"><span class="hs-identifier hs-var">blocks</span></a></span></span><span> </span><span id="local-6989586621681029513"><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681029513"><span class="hs-identifier hs-var">section</span></a></span></span><span> </span><span id="local-6989586621681029512"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029512"><span class="hs-identifier hs-var">tblId</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-1017"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681029511"><span class="annot"><span class="annottext">updateBlock :: Maybe JumpDest -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029511"><span class="hs-identifier hs-var hs-var">updateBlock</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029510"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029510"><span class="hs-identifier hs-var">bid</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span>
</span><span id="line-1018"></span><span>                </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029516"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029510"><span class="hs-identifier hs-var">bid</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-1019"></span><span>                    </span><span class="annot"><span class="annottext">Maybe JumpDest
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>   </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">JumpDest -&gt; Maybe JumpDest
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; JumpDest
</span><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-var">DestBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029510"><span class="hs-identifier hs-var">bid</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-1020"></span><span>                    </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621681029509"><span class="annot"><span class="annottext">JumpDest
</span><a href="#local-6989586621681029509"><span class="hs-identifier hs-var">dest</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">JumpDest -&gt; Maybe JumpDest
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">JumpDest
</span><a href="#local-6989586621681029509"><span class="hs-identifier hs-var">dest</span></a></span><span>
</span><span id="line-1021"></span><span>            </span><span class="annot"><a href="#local-6989586621681029511"><span class="hs-identifier hs-var">updateBlock</span></a></span><span> </span><span id="local-6989586621681029508"><span class="annot"><span class="annottext">Maybe JumpDest
</span><a href="#local-6989586621681029508"><span class="hs-identifier hs-var">dest</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe JumpDest
</span><a href="#local-6989586621681029508"><span class="hs-identifier hs-var">dest</span></a></span><span>
</span><span id="line-1022"></span><span>            </span><span id="local-6989586621681029507"><span class="annot"><span class="annottext">blocks' :: [Maybe JumpDest]
</span><a href="#local-6989586621681029507"><span class="hs-identifier hs-var hs-var">blocks'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Maybe JumpDest -&gt; Maybe JumpDest)
-&gt; [Maybe JumpDest] -&gt; [Maybe JumpDest]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe JumpDest -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029511"><span class="hs-identifier hs-var">updateBlock</span></a></span><span> </span><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029514"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-1023"></span><span>        </span><span class="hs-keyword">in</span><span>  </span><span class="annot"><span class="annottext">Operand -&gt; [Maybe JumpDest] -&gt; Section -&gt; CLabel -&gt; Instr
</span><a href="GHC.CmmToAsm.X86.Instr.html#JMP_TBL"><span class="hs-identifier hs-var">JMP_TBL</span></a></span><span> </span><span class="annot"><span class="annottext">Operand
</span><a href="#local-6989586621681029515"><span class="hs-identifier hs-var">addr</span></a></span><span> </span><span class="annot"><span class="annottext">[Maybe JumpDest]
</span><a href="#local-6989586621681029507"><span class="hs-identifier hs-var">blocks'</span></a></span><span> </span><span class="annot"><span class="annottext">Section
</span><a href="#local-6989586621681029513"><span class="hs-identifier hs-var">section</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029512"><span class="hs-identifier hs-var">tblId</span></a></span><span>
</span><span id="line-1024"></span><span>    </span><span class="annot"><a href="#local-6989586621681029528"><span class="hs-identifier hs-var">shortcutJump'</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">LabelSet
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029506"><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029506"><span class="hs-identifier hs-var">other</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="#local-6989586621681029506"><span class="hs-identifier hs-var">other</span></a></span><span>
</span><span id="line-1025"></span><span>
</span><span id="line-1026"></span><span class="hs-comment">-- Here because it knows about JumpDest</span><span>
</span><span id="line-1027"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatics"><span class="hs-identifier hs-type">shortcutStatics</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Basic.html#Alignment"><span class="hs-identifier hs-type">Alignment</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmStatics"><span class="hs-identifier hs-type">RawCmmStatics</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Basic.html#Alignment"><span class="hs-identifier hs-type">Alignment</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.html#RawCmmStatics"><span class="hs-identifier hs-type">RawCmmStatics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1028"></span><span id="shortcutStatics"><span class="annot"><span class="annottext">shortcutStatics :: (BlockId -&gt; Maybe JumpDest)
-&gt; (Alignment, RawCmmStatics) -&gt; (Alignment, RawCmmStatics)
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatics"><span class="hs-identifier hs-var hs-var">shortcutStatics</span></a></span></span><span> </span><span id="local-6989586621681029505"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029505"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681029504"><span class="annot"><span class="annottext">Alignment
</span><a href="#local-6989586621681029504"><span class="hs-identifier hs-var">align</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmStaticsRaw"><span class="hs-identifier hs-type">CmmStaticsRaw</span></a></span><span> </span><span id="local-6989586621681029502"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029502"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span id="local-6989586621681029501"><span class="annot"><span class="annottext">[CmmStatic]
</span><a href="#local-6989586621681029501"><span class="hs-identifier hs-var">statics</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-1029"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Alignment
</span><a href="#local-6989586621681029504"><span class="hs-identifier hs-var">align</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; [CmmStatic] -&gt; RawCmmStatics
forall (rawOnly :: Bool).
CLabel -&gt; [CmmStatic] -&gt; GenCmmStatics rawOnly
</span><a href="GHC.Cmm.html#CmmStaticsRaw"><span class="hs-identifier hs-var">CmmStaticsRaw</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029502"><span class="hs-identifier hs-var">lbl</span></a></span><span> </span><span class="annot"><span class="annottext">([CmmStatic] -&gt; RawCmmStatics) -&gt; [CmmStatic] -&gt; RawCmmStatics
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmStatic -&gt; CmmStatic) -&gt; [CmmStatic] -&gt; [CmmStatic]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; CmmStatic -&gt; CmmStatic
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatic"><span class="hs-identifier hs-var">shortcutStatic</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029505"><span class="hs-identifier hs-var">fn</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[CmmStatic]
</span><a href="#local-6989586621681029501"><span class="hs-identifier hs-var">statics</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1030"></span><span>  </span><span class="hs-comment">-- we need to get the jump tables, so apply the mapping to the entries</span><span>
</span><span id="line-1031"></span><span>  </span><span class="hs-comment">-- of a CmmData too.</span><span>
</span><span id="line-1032"></span><span>
</span><span id="line-1033"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutLabel"><span class="hs-identifier hs-type">shortcutLabel</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html#CLabel"><span class="hs-identifier hs-type">CLabel</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html#CLabel"><span class="hs-identifier hs-type">CLabel</span></a></span><span>
</span><span id="line-1034"></span><span id="shortcutLabel"><span class="annot"><span class="annottext">shortcutLabel :: (BlockId -&gt; Maybe JumpDest) -&gt; CLabel -&gt; CLabel
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutLabel"><span class="hs-identifier hs-var hs-var">shortcutLabel</span></a></span></span><span> </span><span id="local-6989586621681029498"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029498"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span id="local-6989586621681029497"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029497"><span class="hs-identifier hs-var">lab</span></a></span></span><span>
</span><span id="line-1035"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621681029496"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029496"><span class="hs-identifier hs-var">blkId</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; Maybe BlockId
</span><a href="GHC.Cmm.CLabel.html#maybeLocalBlockLabel"><span class="hs-identifier hs-var">maybeLocalBlockLabel</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029497"><span class="hs-identifier hs-var">lab</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; UniqSet Unique -&gt; BlockId -&gt; CLabel
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortBlockId"><span class="hs-identifier hs-var">shortBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029498"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">UniqSet Unique
forall a. UniqSet a
</span><a href="GHC.Types.Unique.Set.html#emptyUniqSet"><span class="hs-identifier hs-var">emptyUniqSet</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029496"><span class="hs-identifier hs-var">blkId</span></a></span><span>
</span><span id="line-1036"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>                              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029497"><span class="hs-identifier hs-var">lab</span></a></span><span>
</span><span id="line-1037"></span><span>
</span><span id="line-1038"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatic"><span class="hs-identifier hs-type">shortcutStatic</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmStatic"><span class="hs-identifier hs-type">CmmStatic</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmStatic"><span class="hs-identifier hs-type">CmmStatic</span></a></span><span>
</span><span id="line-1039"></span><span id="shortcutStatic"><span class="annot"><span class="annottext">shortcutStatic :: (BlockId -&gt; Maybe JumpDest) -&gt; CmmStatic -&gt; CmmStatic
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatic"><span class="hs-identifier hs-var hs-var">shortcutStatic</span></a></span></span><span> </span><span id="local-6989586621681029492"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029492"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-type">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-type">CmmLabel</span></a></span><span> </span><span id="local-6989586621681029489"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029489"><span class="hs-identifier hs-var">lab</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-1040"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmLit -&gt; CmmStatic
</span><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-var">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmLabel"><span class="hs-identifier hs-var">CmmLabel</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; CLabel -&gt; CLabel
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutLabel"><span class="hs-identifier hs-var">shortcutLabel</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029492"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029489"><span class="hs-identifier hs-var">lab</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-1041"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatic"><span class="hs-identifier hs-var">shortcutStatic</span></a></span><span> </span><span id="local-6989586621681029488"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029488"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-type">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLabelDiffOff"><span class="hs-identifier hs-type">CmmLabelDiffOff</span></a></span><span> </span><span id="local-6989586621681029486"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029486"><span class="hs-identifier hs-var">lbl1</span></a></span></span><span> </span><span id="local-6989586621681029485"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029485"><span class="hs-identifier hs-var">lbl2</span></a></span></span><span> </span><span id="local-6989586621681029484"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029484"><span class="hs-identifier hs-var">off</span></a></span></span><span> </span><span id="local-6989586621681029483"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681029483"><span class="hs-identifier hs-var">w</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-1042"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmLit -&gt; CmmStatic
</span><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-var">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; CLabel -&gt; Int -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmLabelDiffOff"><span class="hs-identifier hs-var">CmmLabelDiffOff</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; CLabel -&gt; CLabel
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortcutLabel"><span class="hs-identifier hs-var">shortcutLabel</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029488"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029486"><span class="hs-identifier hs-var">lbl1</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029485"><span class="hs-identifier hs-var">lbl2</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681029484"><span class="hs-identifier hs-var">off</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681029483"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1043"></span><span>        </span><span class="hs-comment">-- slightly dodgy, we're ignoring the second label, but this</span><span>
</span><span id="line-1044"></span><span>        </span><span class="hs-comment">-- works with the way we use CmmLabelDiffOff for jump tables now.</span><span>
</span><span id="line-1045"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortcutStatic"><span class="hs-identifier hs-var">shortcutStatic</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681029482"><span class="annot"><span class="annottext">CmmStatic
</span><a href="#local-6989586621681029482"><span class="hs-identifier hs-var">other_static</span></a></span></span><span>
</span><span id="line-1046"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmStatic
</span><a href="#local-6989586621681029482"><span class="hs-identifier hs-var">other_static</span></a></span><span>
</span><span id="line-1047"></span><span>
</span><span id="line-1048"></span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#shortBlockId"><span class="hs-identifier hs-type">shortBlockId</span></a></span><span>
</span><span id="line-1049"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#JumpDest"><span class="hs-identifier hs-type">JumpDest</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1050"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Set.html#UniqSet"><span class="hs-identifier hs-type">UniqSet</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span>
</span><span id="line-1051"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-1052"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.CLabel.html#CLabel"><span class="hs-identifier hs-type">CLabel</span></a></span><span>
</span><span id="line-1053"></span><span>
</span><span id="line-1054"></span><span id="shortBlockId"><span class="annot"><span class="annottext">shortBlockId :: (BlockId -&gt; Maybe JumpDest) -&gt; UniqSet Unique -&gt; BlockId -&gt; CLabel
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortBlockId"><span class="hs-identifier hs-var hs-var">shortBlockId</span></a></span></span><span> </span><span id="local-6989586621681029481"><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029481"><span class="hs-identifier hs-var">fn</span></a></span></span><span> </span><span id="local-6989586621681029480"><span class="annot"><span class="annottext">UniqSet Unique
</span><a href="#local-6989586621681029480"><span class="hs-identifier hs-var">seen</span></a></span></span><span> </span><span id="local-6989586621681029479"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029479"><span class="hs-identifier hs-var">blockid</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-1055"></span><span>  </span><span class="hs-keyword">case</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique -&gt; UniqSet Unique -&gt; Bool
forall a. Uniquable a =&gt; a -&gt; UniqSet a -&gt; Bool
</span><a href="GHC.Types.Unique.Set.html#elementOfUniqSet"><span class="hs-identifier hs-var">elementOfUniqSet</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681029477"><span class="hs-identifier hs-var">uq</span></a></span><span> </span><span class="annot"><span class="annottext">UniqSet Unique
</span><a href="#local-6989586621681029480"><span class="hs-identifier hs-var">seen</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029481"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029479"><span class="hs-identifier hs-var">blockid</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-1056"></span><span>    </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Maybe JumpDest
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; CLabel
</span><a href="GHC.Cmm.BlockId.html#blockLbl"><span class="hs-identifier hs-var">blockLbl</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029479"><span class="hs-identifier hs-var">blockid</span></a></span><span>
</span><span id="line-1057"></span><span>    </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Maybe JumpDest
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; CLabel
</span><a href="GHC.Cmm.BlockId.html#blockLbl"><span class="hs-identifier hs-var">blockLbl</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029479"><span class="hs-identifier hs-var">blockid</span></a></span><span>
</span><span id="line-1058"></span><span>    </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestBlockId"><span class="hs-identifier hs-type">DestBlockId</span></a></span><span> </span><span id="local-6989586621681029475"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029475"><span class="hs-identifier hs-var">blockid'</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; Maybe JumpDest) -&gt; UniqSet Unique -&gt; BlockId -&gt; CLabel
</span><a href="GHC.CmmToAsm.X86.Instr.html#shortBlockId"><span class="hs-identifier hs-var">shortBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Maybe JumpDest
</span><a href="#local-6989586621681029481"><span class="hs-identifier hs-var">fn</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">UniqSet Unique -&gt; Unique -&gt; UniqSet Unique
forall a. Uniquable a =&gt; UniqSet a -&gt; a -&gt; UniqSet a
</span><a href="GHC.Types.Unique.Set.html#addOneToUniqSet"><span class="hs-identifier hs-var">addOneToUniqSet</span></a></span><span> </span><span class="annot"><span class="annottext">UniqSet Unique
</span><a href="#local-6989586621681029480"><span class="hs-identifier hs-var">seen</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681029477"><span class="hs-identifier hs-var">uq</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029475"><span class="hs-identifier hs-var">blockid'</span></a></span><span>
</span><span id="line-1059"></span><span>    </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Instr.html#DestImm"><span class="hs-identifier hs-type">DestImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.X86.Regs.html#ImmCLbl"><span class="hs-identifier hs-type">ImmCLbl</span></a></span><span> </span><span id="local-6989586621681029472"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029472"><span class="hs-identifier hs-var">lbl</span></a></span></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681029472"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-1060"></span><span>    </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681029471"><span class="annot"><span class="annottext">Maybe JumpDest
</span><a href="#local-6989586621681029471"><span class="hs-identifier hs-var">_other</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; CLabel
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;shortBlockId&quot;</span></span><span>
</span><span id="line-1061"></span><span>  </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681029477"><span class="annot"><span class="annottext">uq :: Unique
</span><a href="#local-6989586621681029477"><span class="hs-identifier hs-var hs-var">uq</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Unique
forall a. Uniquable a =&gt; a -&gt; Unique
</span><a href="GHC.Types.Unique.html#getUnique"><span class="hs-identifier hs-var">getUnique</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681029479"><span class="hs-identifier hs-var">blockid</span></a></span><span>
</span><span id="line-1062"></span></pre></body></html>